-
Notifications
You must be signed in to change notification settings - Fork 169
/
Copy pathAccessibilityClient.cs
155 lines (139 loc) · 6.79 KB
/
AccessibilityClient.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// <auto-generated/>
#nullable disable
using System;
using System.Threading.Tasks;
using Azure;
using Azure.Core;
using Azure.Core.Pipeline;
namespace Accessibility_LowLevel
{
/// <summary> The Accessibility service client. </summary>
public partial class AccessibilityClient
{
private const string AuthorizationHeader = "Fake-Subscription-Key";
private readonly AzureKeyCredential _keyCredential;
private readonly HttpPipeline _pipeline;
private readonly Uri _endpoint;
/// <summary> The ClientDiagnostics is used to provide tracing support for the client library. </summary>
internal ClientDiagnostics ClientDiagnostics { get; }
/// <summary> The HTTP pipeline for sending and receiving REST requests and responses. </summary>
public virtual HttpPipeline Pipeline => _pipeline;
/// <summary> Initializes a new instance of AccessibilityClient for mocking. </summary>
protected AccessibilityClient()
{
}
/// <summary> Initializes a new instance of AccessibilityClient. </summary>
/// <param name="credential"> A credential used to authenticate to an Azure Service. </param>
/// <param name="endpoint"> server parameter. </param>
/// <param name="options"> The options for configuring the client. </param>
/// <exception cref="ArgumentNullException"> <paramref name="credential"/> is null. </exception>
public AccessibilityClient(AzureKeyCredential credential, Uri endpoint = null, AccessibilityClientOptions options = null)
{
Argument.AssertNotNull(credential, nameof(credential));
endpoint ??= new Uri("http://localhost:3000");
options ??= new AccessibilityClientOptions();
ClientDiagnostics = new ClientDiagnostics(options);
_keyCredential = credential;
_pipeline = HttpPipelineBuilder.Build(options, Array.Empty<HttpPipelinePolicy>(), new HttpPipelinePolicy[] { new AzureKeyCredentialPolicy(_keyCredential, AuthorizationHeader) }, new ResponseClassifier());
_endpoint = endpoint;
}
/// <param name="content"> The content to send as the body of the request. </param>
/// <param name="context"> The request context, which can override default behaviors on the request on a per-call basis. </param>
public virtual async Task<Response> OperationAsync(RequestContent content, RequestContext context = null)
{
using var scope = ClientDiagnostics.CreateScope("AccessibilityClient.Operation");
scope.Start();
try
{
using HttpMessage message = CreateOperationRequest(content, context);
return await _pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false);
}
catch (Exception e)
{
scope.Failed(e);
throw;
}
}
/// <param name="content"> The content to send as the body of the request. </param>
/// <param name="context"> The request context, which can override default behaviors on the request on a per-call basis. </param>
public virtual Response Operation(RequestContent content, RequestContext context = null)
{
using var scope = ClientDiagnostics.CreateScope("AccessibilityClient.Operation");
scope.Start();
try
{
using HttpMessage message = CreateOperationRequest(content, context);
return _pipeline.ProcessMessage(message, context);
}
catch (Exception e)
{
scope.Failed(e);
throw;
}
}
/// <param name="content"> The content to send as the body of the request. </param>
/// <param name="context"> The request context, which can override default behaviors on the request on a per-call basis. </param>
internal virtual async Task<Response> OperationInternalAsync(RequestContent content, RequestContext context = null)
{
using var scope = ClientDiagnostics.CreateScope("AccessibilityClient.OperationInternal");
scope.Start();
try
{
using HttpMessage message = CreateOperationInternalRequest(content, context);
return await _pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false);
}
catch (Exception e)
{
scope.Failed(e);
throw;
}
}
/// <param name="content"> The content to send as the body of the request. </param>
/// <param name="context"> The request context, which can override default behaviors on the request on a per-call basis. </param>
internal virtual Response OperationInternal(RequestContent content, RequestContext context = null)
{
using var scope = ClientDiagnostics.CreateScope("AccessibilityClient.OperationInternal");
scope.Start();
try
{
using HttpMessage message = CreateOperationInternalRequest(content, context);
return _pipeline.ProcessMessage(message, context);
}
catch (Exception e)
{
scope.Failed(e);
throw;
}
}
internal HttpMessage CreateOperationRequest(RequestContent content, RequestContext context)
{
var message = _pipeline.CreateMessage(context, ResponseClassifier200);
var request = message.Request;
request.Method = RequestMethod.Put;
var uri = new RawRequestUriBuilder();
uri.Reset(_endpoint);
uri.AppendPath("/Operation/", false);
request.Uri = uri;
request.Headers.Add("Content-Type", "application/json");
request.Content = content;
return message;
}
internal HttpMessage CreateOperationInternalRequest(RequestContent content, RequestContext context)
{
var message = _pipeline.CreateMessage(context, ResponseClassifier200);
var request = message.Request;
request.Method = RequestMethod.Put;
var uri = new RawRequestUriBuilder();
uri.Reset(_endpoint);
uri.AppendPath("/OperationInternal/", false);
request.Uri = uri;
request.Headers.Add("Content-Type", "application/json");
request.Content = content;
return message;
}
private static ResponseClassifier _responseClassifier200;
private static ResponseClassifier ResponseClassifier200 => _responseClassifier200 ??= new CoreResponseClassifier(stackalloc int[] { 200 });
}
}