From 3a15beec8d54a7953066be5d3cfe87e797dc7a10 Mon Sep 17 00:00:00 2001
From: m-nash <64171366+m-nash@users.noreply.github.com>
Date: Fri, 28 Jun 2024 14:48:07 -0700
Subject: [PATCH] Add convenience methods to clients (#3700)
Fixes https://github.com/Azure/autorest.csharp/issues/4586
Replaces https://github.com/microsoft/typespec/pull/3697
---
.../ClientPipelineExtensionsProvider.cs | 4 +-
.../Providers/MrwSerializationTypeProvider.cs | 26 +-
.../Providers/ScmMethodProviderCollection.cs | 55 ++-
.../ScmMethodProviderCollectionTests.cs | 2 +-
.../Snippets/Snippet.DeclarationStatements.cs | 2 +-
.../src/Writers/CodeWriter.cs | 2 +-
.../Generated/Models/Friend.Serialization.cs | 13 +
...equiredNullableProperties.Serialization.cs | 13 +
.../Models/ProjectedModel.Serialization.cs | 13 +
...rnsAnonymousModelResponse.Serialization.cs | 13 +
.../Models/RoundTripModel.Serialization.cs | 13 +
.../Generated/Models/Thing.Serialization.cs | 13 +
.../src/Generated/UnbrandedTypeSpecClient.cs | 381 ++++++++++++++++++
13 files changed, 538 insertions(+), 12 deletions(-)
diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsProvider.cs
index 8d3f9a2f19..41efb2c775 100644
--- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsProvider.cs
+++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ClientPipelineExtensionsProvider.cs
@@ -138,7 +138,7 @@ private MethodProvider BuildProcessMessage()
Throw(New.Instance(typeof(ClientResultException), _message.Response))
},
MethodBodyStatement.EmptyLine,
- Declare(typeof(PipelineResponse), "response", new TernaryConditionalExpression(_message.BufferResponse, _message.Response, _message.ExtractResponse()), out var response),
+ Declare("response", typeof(PipelineResponse), new TernaryConditionalExpression(_message.BufferResponse, _message.Response, _message.ExtractResponse()), out var response),
Return(response)
}, this);
}
@@ -173,7 +173,7 @@ private MethodProvider BuildProcessMessageAsync()
Throw(new InvokeStaticMethodExpression(typeof(ClientResultException), nameof(ClientResultException.CreateAsync), [_message.Response], CallAsAsync: true))
},
MethodBodyStatement.EmptyLine,
- Declare(typeof(PipelineResponse), "response", new TernaryConditionalExpression(_message.BufferResponse, _message.Response, _message.ExtractResponse()), out var response),
+ Declare("response", typeof(PipelineResponse), new TernaryConditionalExpression(_message.BufferResponse, _message.Response, _message.ExtractResponse()), out var response),
Return(response)
}, this);
}
diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/MrwSerializationTypeProvider.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/MrwSerializationTypeProvider.cs
index f141116349..ac0ef56066 100644
--- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/MrwSerializationTypeProvider.cs
+++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/MrwSerializationTypeProvider.cs
@@ -2,6 +2,7 @@
// Licensed under the MIT License.
using System;
+using System.ClientModel;
using System.ClientModel.Primitives;
using System.Collections.Generic;
using System.IO;
@@ -159,7 +160,10 @@ protected override MethodProvider[] BuildMethods()
// Add PersistableModel serialization methods
BuildPersistableModelWriteMethod(),
BuildPersistableModelCreateMethod(),
- BuildPersistableModelGetFormatFromOptionsMethod()
+ BuildPersistableModelGetFormatFromOptionsMethod(),
+ //cast operators
+ BuildImplicitToBinaryContent(),
+ BuildExplicitFromClientResult()
};
if (_isStruct)
@@ -170,6 +174,26 @@ protected override MethodProvider[] BuildMethods()
return [.. methods];
}
+ private MethodProvider BuildExplicitFromClientResult()
+ {
+ var result = new ParameterProvider("result", $"The {typeof(ClientResult):C} to deserialize the {Type:C} from.", typeof(ClientResult));
+ var modifiers = MethodSignatureModifiers.Public | MethodSignatureModifiers.Static | MethodSignatureModifiers.Explicit | MethodSignatureModifiers.Operator;
+ return new MethodProvider(
+ new MethodSignature(Type.Name, null, modifiers, null, null, [result]),
+ Throw(New.NotImplementedException(Literal("Not implemented"))), //TODO https://github.com/microsoft/typespec/issues/3696
+ this);
+ }
+
+ private MethodProvider BuildImplicitToBinaryContent()
+ {
+ var model = new ParameterProvider(Type.Name.ToVariableName(), $"The {Type:C} to serialize into {typeof(BinaryContent):C}", Type);
+ var modifiers = MethodSignatureModifiers.Public | MethodSignatureModifiers.Static | MethodSignatureModifiers.Implicit | MethodSignatureModifiers.Operator;
+ return new MethodProvider(
+ new MethodSignature(nameof(BinaryContent), null, modifiers, null, null, [model]),
+ Throw(New.NotImplementedException(Literal("Not implemented"))), //TODO https://github.com/microsoft/typespec/issues/3696
+ this);
+ }
+
///
/// Builds the types that the model type serialization implements.
///
diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ScmMethodProviderCollection.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ScmMethodProviderCollection.cs
index 6bd4310559..4cd557def7 100644
--- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ScmMethodProviderCollection.cs
+++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/src/Providers/ScmMethodProviderCollection.cs
@@ -19,6 +19,7 @@ internal class ScmMethodProviderCollection : MethodProviderCollection
{
private string _cleanOperationName;
private string _createRequestMethodName;
+ private ParameterProvider? _bodyParameter;
public ScmMethodProviderCollection(InputOperation operation, TypeProvider enclosingType)
: base(operation, enclosingType)
@@ -34,24 +35,66 @@ protected override IReadOnlyList BuildMethods()
// TO-DO: Add Protocol and Convenience methods https://github.com/Azure/autorest.csharp/issues/4585, https://github.com/Azure/autorest.csharp/issues/4586
BuildCreateMessageMethod(),
BuildProtocolMethod(false),
- BuildProtocolMethod(true)
+ BuildProtocolMethod(true),
+ BuildConvenienceMethod(false),
+ BuildConvenienceMethod(true),
];
}
+ private MethodProvider BuildConvenienceMethod(bool isAsync)
+ {
+ ClientProvider? client = _enclosingType as ClientProvider;
+ if (client is null)
+ {
+ throw new InvalidOperationException("Protocol methods can only be built for client types.");
+ }
+
+ var methodModifier = MethodSignatureModifiers.Public | MethodSignatureModifiers.Virtual;
+ if (isAsync)
+ {
+ methodModifier |= MethodSignatureModifiers.Async;
+ }
+ var methodSignature = new MethodSignature(
+ isAsync ? _cleanOperationName + "Async" : _cleanOperationName,
+ FormattableStringHelpers.FromString(_operation.Description),
+ methodModifier,
+ GetResponseType(_operation.Responses, true, isAsync),
+ null,
+ Parameters: ConvenienceMethodParameters);
+ var processMessageName = isAsync ? "ProcessMessageAsync" : "ProcessMessage";
+ MethodBodyStatement[] methodBody = _bodyParameter is null
+ ? [Return(This.Invoke(methodSignature.Name, [.. ConvenienceMethodParameters, Null], null, isAsync, isAsync))]
+ : [
+ Declare("result", typeof(ClientResult), This.Invoke(methodSignature.Name, [.. ConvenienceMethodParameters, Null], null, isAsync, isAsync), out var result),
+ Return(new InvokeStaticMethodExpression(
+ typeof(ClientResult),
+ nameof(ClientResult.FromValue),
+ [result.CastTo(_bodyParameter.Type), result.Invoke("GetRawResponse")])),
+ ];
+
+ var convenienceMethod = new MethodProvider(methodSignature, methodBody, _enclosingType);
+ convenienceMethod.XmlDocs!.Exceptions.Add(new(typeof(ClientResultException), "Service returned a non-success status code.", []));
+ return convenienceMethod;
+ }
+
private List? _methodParameters;
- private List MethodParameters => _methodParameters ??= GetMethodParameters(_operation);
+ private List MethodParameters => _methodParameters ??= GetMethodParameters(false);
+
+ private List? _convenienceMethodParameters;
+ private List ConvenienceMethodParameters => _convenienceMethodParameters ??= GetMethodParameters(true);
- private static List GetMethodParameters(InputOperation operation)
+ private List GetMethodParameters(bool isConvenience)
{
List methodParameters = new();
- foreach (InputParameter inputParam in operation.Parameters)
+ foreach (InputParameter inputParam in _operation.Parameters)
{
if (inputParam.Kind != InputOperationParameterKind.Method)
continue;
if (inputParam.Location == RequestLocation.Body)
{
- // TODO: add concrete body with https://github.com/Azure/autorest.csharp/issues/4586
- methodParameters.Add(ScmKnownParameters.BinaryContent);
+ var parameter = isConvenience ? ClientModelPlugin.Instance.TypeFactory.CreateCSharpParam(inputParam) : ScmKnownParameters.BinaryContent;
+ _bodyParameter = parameter;
+ methodParameters.Add(parameter);
}
else
{
diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/ScmMethodProviderCollectionTests.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/ScmMethodProviderCollectionTests.cs
index 9cc1fbfa46..7a1dea3028 100644
--- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/ScmMethodProviderCollectionTests.cs
+++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp.ClientModel/test/Providers/ScmMethodProviderCollectionTests.cs
@@ -54,7 +54,7 @@ public void TestDefaultCSharpMethodCollection(InputOperation inputOperation)
{
var methodCollection = new ScmMethodProviderCollection(inputOperation, new MockClientTypeProvider());
Assert.IsNotNull(methodCollection);
- Assert.AreEqual(3, methodCollection.Count);
+ Assert.AreEqual(5, methodCollection.Count);
var method = methodCollection![0];
var signature = method.Signature;
diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Snippets/Snippet.DeclarationStatements.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Snippets/Snippet.DeclarationStatements.cs
index d884efc4c4..0db59b8edc 100644
--- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Snippets/Snippet.DeclarationStatements.cs
+++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Snippets/Snippet.DeclarationStatements.cs
@@ -22,7 +22,7 @@ public static MethodBodyStatement UsingDeclare(string name, StreamSnippet value,
public static MethodBodyStatement UsingDeclare(VariableExpression variable, ValueExpression value)
=> new DeclarationExpression(variable, false, true).Assign(value).Terminate();
- public static MethodBodyStatement Declare(CSharpType variableType, string name, ValueExpression value, out VariableExpression variable)
+ public static MethodBodyStatement Declare(string name, CSharpType variableType, ValueExpression value, out VariableExpression variable)
{
var variableRef = new VariableExpression(variableType, name);
variable = variableRef;
diff --git a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Writers/CodeWriter.cs b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Writers/CodeWriter.cs
index 54e4b522ca..3741cfd275 100644
--- a/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Writers/CodeWriter.cs
+++ b/packages/http-client-csharp/generator/Microsoft.Generator.CSharp/src/Writers/CodeWriter.cs
@@ -701,7 +701,7 @@ public IDisposable WriteMethodDeclarationNoScope(MethodSignatureBase methodBase,
if (isImplicitOrExplicit)
{
- Append($"{method.ReturnType}");
+ AppendIf($"{method.ReturnType}", method.ReturnType is not null);
}
if (method.ExplicitInterface is not null)
diff --git a/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/Friend.Serialization.cs b/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/Friend.Serialization.cs
index c5ba2fa86b..90b7ba2e81 100644
--- a/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/Friend.Serialization.cs
+++ b/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/Friend.Serialization.cs
@@ -3,6 +3,7 @@
#nullable disable
using System;
+using System.ClientModel;
using System.ClientModel.Primitives;
using System.Collections.Generic;
using System.Text.Json;
@@ -75,5 +76,17 @@ Friend IPersistableModel.Create(BinaryData data, ModelReaderWriterOption
}
string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
+
+ /// The to serialize into .
+ public static implicit operator BinaryContent(Friend friend)
+ {
+ throw new NotImplementedException("Not implemented");
+ }
+
+ /// The to deserialize the from.
+ public static explicit operator Friend(ClientResult result)
+ {
+ throw new NotImplementedException("Not implemented");
+ }
}
}
diff --git a/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/ModelWithRequiredNullableProperties.Serialization.cs b/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/ModelWithRequiredNullableProperties.Serialization.cs
index b16901be3c..a1037bcc59 100644
--- a/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/ModelWithRequiredNullableProperties.Serialization.cs
+++ b/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/ModelWithRequiredNullableProperties.Serialization.cs
@@ -3,6 +3,7 @@
#nullable disable
using System;
+using System.ClientModel;
using System.ClientModel.Primitives;
using System.Collections.Generic;
using System.Text.Json;
@@ -102,5 +103,17 @@ ModelWithRequiredNullableProperties IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
+
+ /// The to serialize into .
+ public static implicit operator BinaryContent(ModelWithRequiredNullableProperties modelWithRequiredNullableProperties)
+ {
+ throw new NotImplementedException("Not implemented");
+ }
+
+ /// The to deserialize the from.
+ public static explicit operator ModelWithRequiredNullableProperties(ClientResult result)
+ {
+ throw new NotImplementedException("Not implemented");
+ }
}
}
diff --git a/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/ProjectedModel.Serialization.cs b/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/ProjectedModel.Serialization.cs
index d20a15408c..6902c1c7b5 100644
--- a/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/ProjectedModel.Serialization.cs
+++ b/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/ProjectedModel.Serialization.cs
@@ -3,6 +3,7 @@
#nullable disable
using System;
+using System.ClientModel;
using System.ClientModel.Primitives;
using System.Collections.Generic;
using System.Text.Json;
@@ -75,5 +76,17 @@ ProjectedModel IPersistableModel.Create(BinaryData data, ModelRe
}
string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
+
+ /// The to serialize into .
+ public static implicit operator BinaryContent(ProjectedModel projectedModel)
+ {
+ throw new NotImplementedException("Not implemented");
+ }
+
+ /// The to deserialize the from.
+ public static explicit operator ProjectedModel(ClientResult result)
+ {
+ throw new NotImplementedException("Not implemented");
+ }
}
}
diff --git a/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/ReturnsAnonymousModelResponse.Serialization.cs b/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/ReturnsAnonymousModelResponse.Serialization.cs
index 854d06391f..79e2bdd613 100644
--- a/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/ReturnsAnonymousModelResponse.Serialization.cs
+++ b/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/ReturnsAnonymousModelResponse.Serialization.cs
@@ -3,6 +3,7 @@
#nullable disable
using System;
+using System.ClientModel;
using System.ClientModel.Primitives;
using System.Collections.Generic;
using System.Text.Json;
@@ -68,5 +69,17 @@ ReturnsAnonymousModelResponse IPersistableModel.C
}
string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
+
+ /// The to serialize into .
+ public static implicit operator BinaryContent(ReturnsAnonymousModelResponse returnsAnonymousModelResponse)
+ {
+ throw new NotImplementedException("Not implemented");
+ }
+
+ /// The to deserialize the from.
+ public static explicit operator ReturnsAnonymousModelResponse(ClientResult result)
+ {
+ throw new NotImplementedException("Not implemented");
+ }
}
}
diff --git a/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/RoundTripModel.Serialization.cs b/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/RoundTripModel.Serialization.cs
index 9e0a8d11fe..6355bc6de9 100644
--- a/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/RoundTripModel.Serialization.cs
+++ b/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/RoundTripModel.Serialization.cs
@@ -3,6 +3,7 @@
#nullable disable
using System;
+using System.ClientModel;
using System.ClientModel.Primitives;
using System.Collections.Generic;
using System.Text.Json;
@@ -286,5 +287,17 @@ RoundTripModel IPersistableModel.Create(BinaryData data, ModelRe
}
string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
+
+ /// The to serialize into .
+ public static implicit operator BinaryContent(RoundTripModel roundTripModel)
+ {
+ throw new NotImplementedException("Not implemented");
+ }
+
+ /// The to deserialize the from.
+ public static explicit operator RoundTripModel(ClientResult result)
+ {
+ throw new NotImplementedException("Not implemented");
+ }
}
}
diff --git a/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/Thing.Serialization.cs b/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/Thing.Serialization.cs
index 5612767697..3499912053 100644
--- a/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/Thing.Serialization.cs
+++ b/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/Models/Thing.Serialization.cs
@@ -3,6 +3,7 @@
#nullable disable
using System;
+using System.ClientModel;
using System.ClientModel.Primitives;
using System.Collections.Generic;
using System.Text.Json;
@@ -146,5 +147,17 @@ Thing IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions
}
string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
+
+ /// The to serialize into .
+ public static implicit operator BinaryContent(Thing thing)
+ {
+ throw new NotImplementedException("Not implemented");
+ }
+
+ /// The to deserialize the from.
+ public static explicit operator Thing(ClientResult result)
+ {
+ throw new NotImplementedException("Not implemented");
+ }
}
}
diff --git a/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/UnbrandedTypeSpecClient.cs b/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/UnbrandedTypeSpecClient.cs
index eabb4bacb6..193a9fbcda 100644
--- a/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/UnbrandedTypeSpecClient.cs
+++ b/packages/http-client-csharp/generator/TestProjects/Local/Unbranded-TypeSpec/src/Generated/UnbrandedTypeSpecClient.cs
@@ -6,6 +6,7 @@
using System.ClientModel;
using System.ClientModel.Primitives;
using System.Threading.Tasks;
+using UnbrandedTypeSpec.Models;
namespace UnbrandedTypeSpec
{
@@ -73,6 +74,34 @@ public virtual async Task SayHiAsync(string headParameter, string
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// Return hi.
+ ///
+ ///
+ ///
+ /// or is null.
+ /// Service returned a non-success status code.
+ public virtual ClientResult SayHi(string headParameter, string queryParameter, string optionalQuery)
+ {
+ Argument.AssertNotNull(headParameter, nameof(headParameter));
+ Argument.AssertNotNull(queryParameter, nameof(queryParameter));
+
+ return SayHi(headParameter, queryParameter, optionalQuery, null);
+ }
+
+ /// Return hi.
+ ///
+ ///
+ ///
+ /// or is null.
+ /// Service returned a non-success status code.
+ public virtual async Task SayHiAsync(string headParameter, string queryParameter, string optionalQuery)
+ {
+ Argument.AssertNotNull(headParameter, nameof(headParameter));
+ Argument.AssertNotNull(queryParameter, nameof(queryParameter));
+
+ return await SayHiAsync(headParameter, queryParameter, optionalQuery, null).ConfigureAwait(false);
+ }
+
internal PipelineMessage CreateHelloAgainRequest(string p1, string p2, BinaryContent content, RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -126,6 +155,38 @@ public virtual async Task HelloAgainAsync(string p1, string p2, Bi
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// Return hi again.
+ ///
+ ///
+ ///
+ /// , or is null.
+ /// Service returned a non-success status code.
+ public virtual ClientResult HelloAgain(string p1, string p2, RoundTripModel action)
+ {
+ Argument.AssertNotNull(p1, nameof(p1));
+ Argument.AssertNotNull(p2, nameof(p2));
+ Argument.AssertNotNull(action, nameof(action));
+
+ ClientResult result = HelloAgain(p1, p2, action, null);
+ return ClientResult.FromValue((RoundTripModel)result, result.GetRawResponse());
+ }
+
+ /// Return hi again.
+ ///
+ ///
+ ///
+ /// , or is null.
+ /// Service returned a non-success status code.
+ public virtual async Task HelloAgainAsync(string p1, string p2, RoundTripModel action)
+ {
+ Argument.AssertNotNull(p1, nameof(p1));
+ Argument.AssertNotNull(p2, nameof(p2));
+ Argument.AssertNotNull(action, nameof(action));
+
+ ClientResult result = await HelloAgainAsync(p1, p2, action, null).ConfigureAwait(false);
+ return ClientResult.FromValue((RoundTripModel)result, result.GetRawResponse());
+ }
+
internal PipelineMessage CreateNoContentTypeRequest(string p1, string p2, BinaryContent content, RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -179,6 +240,38 @@ public virtual async Task NoContentTypeAsync(string p1, string p2,
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// Return hi again.
+ ///
+ ///
+ ///
+ /// , or is null.
+ /// Service returned a non-success status code.
+ public virtual ClientResult NoContentType(string p1, string p2, RoundTripModel action)
+ {
+ Argument.AssertNotNull(p1, nameof(p1));
+ Argument.AssertNotNull(p2, nameof(p2));
+ Argument.AssertNotNull(action, nameof(action));
+
+ ClientResult result = NoContentType(p1, p2, action, null);
+ return ClientResult.FromValue((RoundTripModel)result, result.GetRawResponse());
+ }
+
+ /// Return hi again.
+ ///
+ ///
+ ///
+ /// , or is null.
+ /// Service returned a non-success status code.
+ public virtual async Task NoContentTypeAsync(string p1, string p2, RoundTripModel action)
+ {
+ Argument.AssertNotNull(p1, nameof(p1));
+ Argument.AssertNotNull(p2, nameof(p2));
+ Argument.AssertNotNull(action, nameof(action));
+
+ ClientResult result = await NoContentTypeAsync(p1, p2, action, null).ConfigureAwait(false);
+ return ClientResult.FromValue((RoundTripModel)result, result.GetRawResponse());
+ }
+
internal PipelineMessage CreateHelloDemo2Request(RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -218,6 +311,20 @@ public virtual async Task HelloDemo2Async(RequestOptions options)
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// Return hi in demo2.
+ /// Service returned a non-success status code.
+ public virtual ClientResult HelloDemo2()
+ {
+ return HelloDemo2(null);
+ }
+
+ /// Return hi in demo2.
+ /// Service returned a non-success status code.
+ public virtual async Task HelloDemo2Async()
+ {
+ return await HelloDemo2Async(null).ConfigureAwait(false);
+ }
+
internal PipelineMessage CreateCreateLiteralRequest(BinaryContent content, RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -259,6 +366,30 @@ public virtual async Task CreateLiteralAsync(BinaryContent content
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// Create with literal value.
+ ///
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual ClientResult CreateLiteral(Thing body)
+ {
+ Argument.AssertNotNull(body, nameof(body));
+
+ ClientResult result = CreateLiteral(body, null);
+ return ClientResult.FromValue((Thing)result, result.GetRawResponse());
+ }
+
+ /// Create with literal value.
+ ///
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual async Task CreateLiteralAsync(Thing body)
+ {
+ Argument.AssertNotNull(body, nameof(body));
+
+ ClientResult result = await CreateLiteralAsync(body, null).ConfigureAwait(false);
+ return ClientResult.FromValue((Thing)result, result.GetRawResponse());
+ }
+
internal PipelineMessage CreateHelloLiteralRequest(RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -298,6 +429,20 @@ public virtual async Task HelloLiteralAsync(RequestOptions options
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// Send literal parameters.
+ /// Service returned a non-success status code.
+ public virtual ClientResult HelloLiteral()
+ {
+ return HelloLiteral(null);
+ }
+
+ /// Send literal parameters.
+ /// Service returned a non-success status code.
+ public virtual async Task HelloLiteralAsync()
+ {
+ return await HelloLiteralAsync(null).ConfigureAwait(false);
+ }
+
internal PipelineMessage CreateTopActionRequest(DateTimeOffset action, RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -345,6 +490,28 @@ public virtual async Task TopActionAsync(DateTimeOffset action, Re
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// top level method.
+ ///
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual ClientResult TopAction(DateTimeOffset action)
+ {
+ Argument.AssertNotNull(action, nameof(action));
+
+ return TopAction(action, null);
+ }
+
+ /// top level method.
+ ///
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual async Task TopActionAsync(DateTimeOffset action)
+ {
+ Argument.AssertNotNull(action, nameof(action));
+
+ return await TopActionAsync(action, null).ConfigureAwait(false);
+ }
+
internal PipelineMessage CreateTopAction2Request(RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -384,6 +551,20 @@ public virtual async Task TopAction2Async(RequestOptions options)
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// top level method2.
+ /// Service returned a non-success status code.
+ public virtual ClientResult TopAction2()
+ {
+ return TopAction2(null);
+ }
+
+ /// top level method2.
+ /// Service returned a non-success status code.
+ public virtual async Task TopAction2Async()
+ {
+ return await TopAction2Async(null).ConfigureAwait(false);
+ }
+
internal PipelineMessage CreatePatchActionRequest(BinaryContent content, RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -425,6 +606,30 @@ public virtual async Task PatchActionAsync(BinaryContent content,
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// top level patch.
+ ///
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual ClientResult PatchAction(Thing body)
+ {
+ Argument.AssertNotNull(body, nameof(body));
+
+ ClientResult result = PatchAction(body, null);
+ return ClientResult.FromValue((Thing)result, result.GetRawResponse());
+ }
+
+ /// top level patch.
+ ///
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual async Task PatchActionAsync(Thing body)
+ {
+ Argument.AssertNotNull(body, nameof(body));
+
+ ClientResult result = await PatchActionAsync(body, null).ConfigureAwait(false);
+ return ClientResult.FromValue((Thing)result, result.GetRawResponse());
+ }
+
internal PipelineMessage CreateAnonymousBodyRequest(BinaryContent content, RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -466,6 +671,30 @@ public virtual async Task AnonymousBodyAsync(BinaryContent content
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// body parameter without body decorator.
+ /// A model with a few properties of literal types.
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual ClientResult AnonymousBody(Thing Thing)
+ {
+ Argument.AssertNotNull(Thing, nameof(Thing));
+
+ ClientResult result = AnonymousBody(Thing, null);
+ return ClientResult.FromValue((Thing)result, result.GetRawResponse());
+ }
+
+ /// body parameter without body decorator.
+ /// A model with a few properties of literal types.
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual async Task AnonymousBodyAsync(Thing Thing)
+ {
+ Argument.AssertNotNull(Thing, nameof(Thing));
+
+ ClientResult result = await AnonymousBodyAsync(Thing, null).ConfigureAwait(false);
+ return ClientResult.FromValue((Thing)result, result.GetRawResponse());
+ }
+
internal PipelineMessage CreateFriendlyModelRequest(BinaryContent content, RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -507,6 +736,30 @@ public virtual async Task FriendlyModelAsync(BinaryContent content
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// Model can have its friendly name.
+ /// this is not a friendly model but with a friendly name.
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual ClientResult FriendlyModel(Friend Friend)
+ {
+ Argument.AssertNotNull(Friend, nameof(Friend));
+
+ ClientResult result = FriendlyModel(Friend, null);
+ return ClientResult.FromValue((Friend)result, result.GetRawResponse());
+ }
+
+ /// Model can have its friendly name.
+ /// this is not a friendly model but with a friendly name.
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual async Task FriendlyModelAsync(Friend Friend)
+ {
+ Argument.AssertNotNull(Friend, nameof(Friend));
+
+ ClientResult result = await FriendlyModelAsync(Friend, null).ConfigureAwait(false);
+ return ClientResult.FromValue((Friend)result, result.GetRawResponse());
+ }
+
internal PipelineMessage CreateAddTimeHeaderRequest(DateTimeOffset repeatabilityFirstSent, RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -548,6 +801,22 @@ public virtual async Task AddTimeHeaderAsync(DateTimeOffset repeat
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// addTimeHeader.
+ ///
+ /// Service returned a non-success status code.
+ public virtual ClientResult AddTimeHeader(DateTimeOffset repeatabilityFirstSent)
+ {
+ return AddTimeHeader(repeatabilityFirstSent, null);
+ }
+
+ /// addTimeHeader.
+ ///
+ /// Service returned a non-success status code.
+ public virtual async Task AddTimeHeaderAsync(DateTimeOffset repeatabilityFirstSent)
+ {
+ return await AddTimeHeaderAsync(repeatabilityFirstSent, null).ConfigureAwait(false);
+ }
+
internal PipelineMessage CreateProjectedNameModelRequest(BinaryContent content, RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -589,6 +858,30 @@ public virtual async Task ProjectedNameModelAsync(BinaryContent co
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// Model can have its projected name.
+ /// this is a model with a projected name.
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual ClientResult ProjectedNameModel(ProjectedModel ProjectedModel)
+ {
+ Argument.AssertNotNull(ProjectedModel, nameof(ProjectedModel));
+
+ ClientResult result = ProjectedNameModel(ProjectedModel, null);
+ return ClientResult.FromValue((ProjectedModel)result, result.GetRawResponse());
+ }
+
+ /// Model can have its projected name.
+ /// this is a model with a projected name.
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual async Task ProjectedNameModelAsync(ProjectedModel ProjectedModel)
+ {
+ Argument.AssertNotNull(ProjectedModel, nameof(ProjectedModel));
+
+ ClientResult result = await ProjectedNameModelAsync(ProjectedModel, null).ConfigureAwait(false);
+ return ClientResult.FromValue((ProjectedModel)result, result.GetRawResponse());
+ }
+
internal PipelineMessage CreateReturnsAnonymousModelRequest(RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -628,6 +921,20 @@ public virtual async Task ReturnsAnonymousModelAsync(RequestOption
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// return anonymous model.
+ /// Service returned a non-success status code.
+ public virtual ClientResult ReturnsAnonymousModel()
+ {
+ return ReturnsAnonymousModel(null);
+ }
+
+ /// return anonymous model.
+ /// Service returned a non-success status code.
+ public virtual async Task ReturnsAnonymousModelAsync()
+ {
+ return await ReturnsAnonymousModelAsync(null).ConfigureAwait(false);
+ }
+
internal PipelineMessage CreateGetUnknownValueRequest(RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -667,6 +974,20 @@ public virtual async Task GetUnknownValueAsync(RequestOptions opti
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// get extensible enum.
+ /// Service returned a non-success status code.
+ public virtual ClientResult GetUnknownValue()
+ {
+ return GetUnknownValue(null);
+ }
+
+ /// get extensible enum.
+ /// Service returned a non-success status code.
+ public virtual async Task GetUnknownValueAsync()
+ {
+ return await GetUnknownValueAsync(null).ConfigureAwait(false);
+ }
+
internal PipelineMessage CreateInternalProtocolRequest(BinaryContent content, RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -708,6 +1029,30 @@ public virtual async Task InternalProtocolAsync(BinaryContent cont
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// When set protocol false and convenient true, then the protocol method should be internal.
+ ///
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual ClientResult InternalProtocol(Thing body)
+ {
+ Argument.AssertNotNull(body, nameof(body));
+
+ ClientResult result = InternalProtocol(body, null);
+ return ClientResult.FromValue((Thing)result, result.GetRawResponse());
+ }
+
+ /// When set protocol false and convenient true, then the protocol method should be internal.
+ ///
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual async Task InternalProtocolAsync(Thing body)
+ {
+ Argument.AssertNotNull(body, nameof(body));
+
+ ClientResult result = await InternalProtocolAsync(body, null).ConfigureAwait(false);
+ return ClientResult.FromValue((Thing)result, result.GetRawResponse());
+ }
+
internal PipelineMessage CreateStillConvenientRequest(RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -747,6 +1092,20 @@ public virtual async Task StillConvenientAsync(RequestOptions opti
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+ /// When set protocol false and convenient true, the convenient method should be generated even it has the same signature as protocol one.
+ /// Service returned a non-success status code.
+ public virtual ClientResult StillConvenient()
+ {
+ return StillConvenient(null);
+ }
+
+ /// When set protocol false and convenient true, the convenient method should be generated even it has the same signature as protocol one.
+ /// Service returned a non-success status code.
+ public virtual async Task StillConvenientAsync()
+ {
+ return await StillConvenientAsync(null).ConfigureAwait(false);
+ }
+
internal PipelineMessage CreateHeadAsBooleanRequest(string id, RequestOptions options)
{
throw new NotImplementedException("Method not implemented.");
@@ -793,5 +1152,27 @@ public virtual async Task HeadAsBooleanAsync(string id, RequestOpt
using PipelineMessage message = CreateHeadAsBooleanRequest(id, options);
return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
}
+
+ /// head as boolean.
+ ///
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual ClientResult HeadAsBoolean(string id)
+ {
+ Argument.AssertNotNull(id, nameof(id));
+
+ return HeadAsBoolean(id, null);
+ }
+
+ /// head as boolean.
+ ///
+ /// is null.
+ /// Service returned a non-success status code.
+ public virtual async Task HeadAsBooleanAsync(string id)
+ {
+ Argument.AssertNotNull(id, nameof(id));
+
+ return await HeadAsBooleanAsync(id, null).ConfigureAwait(false);
+ }
}
}