openai/openai-dotnet

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
OpenAI_2.4.0

Branches

Tags

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

Clone

HTTPS

Download ZIP

codegen/generator/src/Visitors/VirtualMessageCreationVisitor.cs

41lines · modecode

1using Microsoft.TypeSpec.Generator.ClientModel;
2using Microsoft.TypeSpec.Generator.Primitives;
3using Microsoft.TypeSpec.Generator.Providers;
4
5namespace OpenAILibraryPlugin.Visitors;
6
7/// <summary>
8/// This visitor updates generated PipelineMessage creation methods to be virtual (and thus overrideable via derived clients).
9/// </summary>
10public class VirtualMessageCreationVisitor : ScmLibraryVisitor
11{
12 protected override MethodProvider VisitMethod(MethodProvider method)
13 {
14 if (method.Signature?.ReturnType?.Name != "PipelineMessage"
15 || method.Signature?.Name?.StartsWith("Create") != true
16 || method.Signature?.Name?.EndsWith("Request") != true
17 || method.Signature?.Modifiers.HasFlag(MethodSignatureModifiers.Internal) != true)
18 {
19 return method;
20 }
21
22 if (!method.Signature.Modifiers.HasFlag(MethodSignatureModifiers.Virtual))
23 {
24 MethodSignature newSignature = new(
25 method.Signature.Name,
26 method.Signature.Description,
27 method.Signature.Modifiers | MethodSignatureModifiers.Virtual,
28 method.Signature.ReturnType,
29 method.Signature.ReturnDescription,
30 method.Signature.Parameters,
31 method.Signature.Attributes,
32 method.Signature.GenericArguments,
33 method.Signature.GenericParameterConstraints,
34 method.Signature.ExplicitInterface,
35 NonDocumentComment: "Plugin customization: make PipelineMessage creation methods virtual");
36 method.Update(signature: newSignature);
37 }
38
39 return method;
40 }
41}