File: Utilities\AIJsonSchemaTransformContext.cs
Web Access
Project: src\src\Libraries\Microsoft.Extensions.AI.Abstractions\Microsoft.Extensions.AI.Abstractions.csproj (Microsoft.Extensions.AI.Abstractions)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#pragma warning disable CA1815 // Override equals and operator equals on value types
 
using System;
 
namespace Microsoft.Extensions.AI;
 
/// <summary>
/// Defines the context for transforming a schema node withing a larger schema document.
/// </summary>
/// <remarks>
/// This struct is being passed to the user-provided <see cref="AIJsonSchemaTransformOptions.TransformSchemaNode"/> 
/// callback by the <see cref="AIJsonUtilities.CreateJsonSchema"/> method and cannot be instantiated directly.
/// </remarks>
public readonly struct AIJsonSchemaTransformContext
{
    private readonly string[] _path;
 
    internal AIJsonSchemaTransformContext(string[] path)
    {
        _path = path;
    }
 
    /// <summary>
    /// Gets the path to the schema document currently being generated.
    /// </summary>
    public ReadOnlySpan<string> Path => _path;
 
    /// <summary>
    /// Gets the containing property name if the current schema is a property of an object.
    /// </summary>
    public string? PropertyName => Path is [.., "properties", string name] ? name : null;
 
    /// <summary>
    /// Gets a value indicating whether the current schema is a collection element.
    /// </summary>
    public bool IsCollectionElementSchema => Path is [.., "items"];
 
    /// <summary>
    /// Gets a value indicating whether the current schema is a dictionary value.
    /// </summary>
    public bool IsDictionaryValueSchema => Path is [.., "additionalProperties"];
}