using System;
using System.ClientModel;
using System.ClientModel.Primitives;
using System.Diagnostics;
using System.IO;
using System.Text.Json;
#nullable enable
namespace OpenAI.Assistants;
internal class RunCollectionPageToken : ContinuationToken
{
protected RunCollectionPageToken(string threadId, int? limit, string? order, string? after, string? before)
{
ThreadId = threadId;
Limit = limit;
Order = order;
After = after;
Before = before;
}
public string ThreadId { get; }
public int? Limit { get; }
public string? Order { get; }
public string? After { get; }
public string? Before { get; }
public override BinaryData ToBytes()
{
using MemoryStream stream = new();
using Utf8JsonWriter writer = new(stream);
writer.WriteStartObject();
writer.WriteString("threadId", ThreadId);
if (Limit.HasValue)
{
writer.WriteNumber("limit", Limit.Value);
}
if (Order is not null)
{
writer.WriteString("order", Order);
}
if (After is not null)
{
writer.WriteString("after", After);
}
if (Before is not null)
{
writer.WriteString("before", Before);
}
writer.WriteEndObject();
writer.Flush();
stream.Position = 0;
return BinaryData.FromStream(stream);
}
public static RunCollectionPageToken FromToken(ContinuationToken pageToken)
{
if (pageToken is RunCollectionPageToken token)
{
return token;
}
BinaryData data = pageToken.ToBytes();
if (data.ToMemory().Length == 0)
{
throw new ArgumentException("Failed to create RunCollectionPageToken from provided pageToken.", nameof(pageToken));
}
Utf8JsonReader reader = new(data);
string threadId = null!;
int? limit = null;
string? order = null;
string? after = null;
string? before = null;
reader.Read();
Debug.Assert(reader.TokenType == JsonTokenType.StartObject);
while (reader.Read())
{
if (reader.TokenType == JsonTokenType.EndObject)
{
break;
}
Debug.Assert(reader.TokenType == JsonTokenType.PropertyName);
string propertyName = reader.GetString()!;
switch (propertyName)
{
case "threadId":
reader.Read();
Debug.Assert(reader.TokenType == JsonTokenType.String);
threadId = reader.GetString()!;
break;
case "limit":
reader.Read();
Debug.Assert(reader.TokenType == JsonTokenType.Number);
limit = reader.GetInt32();
break;
case "order":
reader.Read();
Debug.Assert(reader.TokenType == JsonTokenType.String);
order = reader.GetString();
break;
case "after":
reader.Read();
Debug.Assert(reader.TokenType == JsonTokenType.String);
after = reader.GetString();
break;
case "before":
reader.Read();
Debug.Assert(reader.TokenType == JsonTokenType.String);
before = reader.GetString();
break;
default:
throw new JsonException($"Unrecognized property '{propertyName}'.");
}
}
if (threadId is null)
{
throw new ArgumentException("Failed to create RunCollectionPageToken from provided pageToken.", nameof(pageToken));
}
return new(threadId, limit, order, after, before);
}
public static RunCollectionPageToken FromOptions(string threadId, int? limit, string? order, string? after, string? before)
=> new(threadId, limit, order, after, before);
public static RunCollectionPageToken? FromResponse(ClientResult result, string threadId, int? limit, string? order, string? before)
{
PipelineResponse response = result.GetRawResponse();
using JsonDocument doc = JsonDocument.Parse(response.Content);
string lastId = doc.RootElement.GetProperty("last_id"u8).GetString()!;
bool hasMore = doc.RootElement.GetProperty("has_more"u8).GetBoolean();
if (!hasMore || lastId is null)
{
return null;
}
return new(threadId, limit, order, lastId, before);
}
}openai/openai-dotnet
Publicmirrored from https://github.com/openai/openai-dotnetAvailable
src/Custom/Assistants/Internal/Pagination/RunCollectionPageToken.cs
164lines · modepreview