src/Custom/FineTuning/Internal/Pagination/FineTuningJobCollectionPageToken.cs (73 lines of code) (raw):

using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Diagnostics; using System.Text.Json; #nullable enable namespace OpenAI.FineTuning; internal class FineTuningJobCollectionPageToken : ContinuationToken { protected FineTuningJobCollectionPageToken(int? limit, string? after) { Limit = limit; After = after; } public int? Limit { get; } public string? After { get; } public static FineTuningJobCollectionPageToken FromToken(ContinuationToken pageToken) { if (pageToken is FineTuningJobCollectionPageToken token) { return token; } BinaryData data = pageToken.ToBytes(); if (data.ToMemory().Length == 0) { throw new ArgumentException("Failed to create FineTuningJobCollectionPageToken from provided pageToken.", nameof(pageToken)); } Utf8JsonReader reader = new(data); int? limit = null; string? after = 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 "limit": reader.Read(); Debug.Assert(reader.TokenType == JsonTokenType.Number); limit = reader.GetInt32(); break; case "after": reader.Read(); Debug.Assert(reader.TokenType == JsonTokenType.String); after = reader.GetString(); break; default: throw new JsonException($"Unrecognized property '{propertyName}'."); } } return new(limit, after); } public static FineTuningJobCollectionPageToken FromOptions(int? limit, string? after) => new(limit, after); public static FineTuningJobCollectionPageToken? FromResponse(ClientResult result, int? limit) { 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(limit, lastId); } }