@@ -17,10 +17,11 @@ public partial class {{name}}Client : ResourceClient
1717 }
1818
1919 {{for api in apis }}
20+ {{~ $filteredParams = FilterParameters api.operation "watch" ~}}
2021 /// <summary>
2122 /// {{ToXmlDoc api.operation.description}}
2223 /// </summary>
23- {{ for parameter in api.operation.parameters }}
24+ {{ for parameter in $filteredParams }}
2425 /// <param name="{{GetDotNetNameOpenApiParameter parameter "false"}}">
2526 /// {{ToXmlDoc parameter.description}}
2627 /// </param>
@@ -29,15 +30,15 @@ public partial class {{name}}Client : ResourceClient
2930 /// A <see cref="CancellationToken"/> which can be used to cancel the asynchronous operation.
3031 /// </param>
3132 public async Task{{GetReturnType api.operation "<>"}} {{GetActionName api.operation name "Async"}}(
32- {{ for parameter in api.operation.parameters }}
33+ {{ for parameter in $filteredParams }}
3334 {{GetDotNetTypeOpenApiParameter parameter}} {{GetDotNetNameOpenApiParameter parameter "true"}},
3435 {{ end }}
3536 CancellationToken cancellationToken = default(CancellationToken))
3637 {
3738 {{if IfReturnType api.operation "stream"}}
3839 var _result = await Client.{{group}}.{{GetOperationId api.operation "WithHttpMessagesAsync"}}(
3940 {{ for parameter in api.operation.parameters}}
40- {{GetDotNetNameOpenApiParameter parameter " false" }},
41+ {{GetParameterValueForWatch parameter false}},
4142 {{end}}
4243 null,
4344 cancellationToken);
@@ -47,7 +48,7 @@ public partial class {{name}}Client : ResourceClient
4748 {{if IfReturnType api.operation "obj"}}
4849 using (var _result = await Client.{{group}}.{{GetOperationId api.operation "WithHttpMessagesAsync"}}(
4950 {{ for parameter in api.operation.parameters}}
50- {{GetDotNetNameOpenApiParameter parameter " false" }},
51+ {{GetParameterValueForWatch parameter false}},
5152 {{end}}
5253 null,
5354 cancellationToken).ConfigureAwait(false))
@@ -58,7 +59,7 @@ public partial class {{name}}Client : ResourceClient
5859 {{if IfReturnType api.operation "void"}}
5960 using (var _result = await Client.{{group}}.{{GetOperationId api.operation "WithHttpMessagesAsync"}}(
6061 {{ for parameter in api.operation.parameters}}
61- {{GetDotNetNameOpenApiParameter parameter " false" }},
62+ {{GetParameterValueForWatch parameter false}},
6263 {{end}}
6364 null,
6465 cancellationToken).ConfigureAwait(false))
@@ -71,7 +72,7 @@ public partial class {{name}}Client : ResourceClient
7172 /// <summary>
7273 /// {{ToXmlDoc api.operation.description}}
7374 /// </summary>
74- {{ for parameter in api.operation.parameters }}
75+ {{ for parameter in $filteredParams }}
7576 /// <param name="{{GetDotNetNameOpenApiParameter parameter "false"}}">
7677 /// {{ToXmlDoc parameter.description}}
7778 /// </param>
@@ -80,14 +81,14 @@ public partial class {{name}}Client : ResourceClient
8081 /// A <see cref="CancellationToken"/> which can be used to cancel the asynchronous operation.
8182 /// </param>
8283 public async Task<T> {{GetActionName api.operation name "Async"}}<T>(
83- {{ for parameter in api.operation.parameters }}
84+ {{ for parameter in $filteredParams }}
8485 {{GetDotNetTypeOpenApiParameter parameter}} {{GetDotNetNameOpenApiParameter parameter "false"}},
8586 {{ end }}
8687 CancellationToken cancellationToken = default(CancellationToken))
8788 {
8889 using (var _result = await Client.{{group}}.{{GetOperationId api.operation "WithHttpMessagesAsync"}}<T>(
8990 {{ for parameter in api.operation.parameters}}
90- {{GetDotNetNameOpenApiParameter parameter " false" }},
91+ {{GetParameterValueForWatch parameter false}},
9192 {{end}}
9293 null,
9394 cancellationToken).ConfigureAwait(false))
@@ -96,5 +97,68 @@ public partial class {{name}}Client : ResourceClient
9697 }
9798 }
9899 {{end}}
100+
101+ {{if IfParamContains api.operation "watch"}}
102+ /// <summary>
103+ /// Watch {{ToXmlDoc api.operation.description}}
104+ /// </summary>
105+ {{ for parameter in $filteredParams}}
106+ /// <param name="{{GetDotNetNameOpenApiParameter parameter "false"}}">
107+ /// {{ToXmlDoc parameter.description}}
108+ /// </param>
109+ {{ end }}
110+ /// <param name="onEvent">Callback when any event raised from api server</param>
111+ /// <param name="onError">Callback when any exception was caught during watching</param>
112+ /// <param name="onClosed">Callback when the server closes the connection</param>
113+ public Watcher<{{GetReturnType api.operation "T"}}> Watch{{GetActionName api.operation name ""}}(
114+ {{ for parameter in $filteredParams}}
115+ {{GetDotNetTypeOpenApiParameter parameter}} {{GetDotNetNameOpenApiParameter parameter "true"}},
116+ {{ end }}
117+ Action<WatchEventType, {{GetReturnType api.operation "T"}}> onEvent = null,
118+ Action<Exception> onError = null,
119+ Action onClosed = null)
120+ {
121+ if (onEvent == null) throw new ArgumentNullException(nameof(onEvent));
122+
123+ var responseTask = Client.{{group}}.{{GetOperationId api.operation "WithHttpMessagesAsync"}}(
124+ {{ for parameter in api.operation.parameters}}
125+ {{GetParameterValueForWatch parameter true}},
126+ {{ end }}
127+ null,
128+ CancellationToken.None);
129+
130+ return responseTask.Watch<{{GetReturnType api.operation "T"}}, {{GetReturnType api.operation "TList"}}>(
131+ onEvent, onError, onClosed);
132+ }
133+
134+ /// <summary>
135+ /// Watch {{ToXmlDoc api.operation.description}} as async enumerable
136+ /// </summary>
137+ {{ for parameter in $filteredParams}}
138+ /// <param name="{{GetDotNetNameOpenApiParameter parameter "false"}}">
139+ /// {{ToXmlDoc parameter.description}}
140+ /// </param>
141+ {{ end }}
142+ /// <param name="onError">Callback when any exception was caught during watching</param>
143+ /// <param name="cancellationToken">Cancellation token</param>
144+ public IAsyncEnumerable<(WatchEventType, {{GetReturnType api.operation "T"}})> Watch{{GetActionName api.operation name "Async"}}(
145+ {{ for parameter in $filteredParams}}
146+ {{GetDotNetTypeOpenApiParameter parameter}} {{GetDotNetNameOpenApiParameter parameter "true"}},
147+ {{ end }}
148+ Action<Exception> onError = null,
149+ CancellationToken cancellationToken = default)
150+ {
151+ var responseTask = Client.{{group}}.{{GetOperationId api.operation "WithHttpMessagesAsync"}}(
152+ {{ for parameter in api.operation.parameters}}
153+ {{GetParameterValueForWatch parameter true}},
154+ {{ end }}
155+ null,
156+ cancellationToken);
157+
158+ return responseTask.WatchAsync<{{GetReturnType api.operation "T"}}, {{GetReturnType api.operation "TList"}}>(
159+ onError, cancellationToken);
160+ }
99161 {{end}}
100- }
162+
163+ {{end}}
164+ }
0 commit comments