openai/openai-dotnet

Public

mirrored from https://github.com/openai/openai-dotnetAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
achandmsft-patch-2

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

codegen/generator/src/Visitors/ModelSerializationVisitor.cs

35lines · modepreview

using Microsoft.TypeSpec.Generator.ClientModel;
using Microsoft.TypeSpec.Generator.ClientModel.Providers;
using Microsoft.TypeSpec.Generator.Input;
using Microsoft.TypeSpec.Generator.Providers;
using System.Linq;

namespace OpenAILibraryPlugin.Visitors;

/// <summary>
/// A visitor to add MRW serialization to models.
/// </summary>
public class ModelSerializationVisitor : ScmLibraryVisitor
{
    protected override ModelProvider? PreVisitModel(InputModelType model, ModelProvider? type)
    {
        if (type is null || model.Usage.HasFlag(InputModelTypeUsage.Json))
        {
            return base.PreVisitModel(model, type);
        }

        foreach (var provider in type.SerializationProviders)
        {
            if (provider is MrwSerializationTypeDefinition)
            {
                return base.PreVisitModel(model, type);
            }
        }

        var serializations = type.SerializationProviders.ToList();
        serializations.Add(new MrwSerializationTypeDefinition(model, type));
        type.Update(serializations: serializations);

        return base.PreVisitModel(model, type);
    }
}