@@ -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,69 @@ public partial class {{name}}Client : ResourceClient
9697        }
9798    }
9899    {{end}}
100+ 
101+ #if !K8S_AOT
102+     {{if IfParamContains api.operation "watch"}}
103+     /// <summary>
104+     /// Watch {{ToXmlDoc api.operation.description}}
105+     /// </summary>
106+     {{ for parameter in $filteredParams}}
107+     /// <param name="{{GetDotNetNameOpenApiParameter parameter "false"}}">
108+     /// {{ToXmlDoc parameter.description}}
109+     /// </param>
110+     {{ end }}
111+     /// <param name="onEvent">Callback when any event raised from api server</param>
112+     /// <param name="onError">Callback when any exception was caught during watching</param>
113+     /// <param name="onClosed">Callback when the server closes the connection</param>
114+     public Watcher<{{GetReturnType api.operation "T"}}> Watch{{GetActionName api.operation name ""}}(
115+         {{ for parameter in $filteredParams}}
116+         {{GetDotNetTypeOpenApiParameter parameter}} {{GetDotNetNameOpenApiParameter parameter "true"}},
117+         {{ end }}
118+         Action<WatchEventType, {{GetReturnType api.operation "T"}}> onEvent = null,
119+         Action<Exception> onError = null,
120+         Action onClosed = null)
121+     {
122+         if (onEvent == null) throw new ArgumentNullException(nameof(onEvent));
123+ 
124+         var responseTask = Client.{{group}}.{{GetOperationId api.operation "WithHttpMessagesAsync"}}(
125+             {{ for parameter in api.operation.parameters}}
126+             {{GetParameterValueForWatch parameter true}},
127+             {{ end }}
128+             null,
129+             CancellationToken.None);
130+ 
131+         return responseTask.Watch<{{GetReturnType api.operation "T"}}, {{GetReturnType api.operation "TList"}}>(
132+             onEvent, onError, onClosed);
133+     }
134+ 
135+     /// <summary>
136+     /// Watch {{ToXmlDoc api.operation.description}} as async enumerable
137+     /// </summary>
138+     {{ for parameter in $filteredParams}}
139+     /// <param name="{{GetDotNetNameOpenApiParameter parameter "false"}}">
140+     /// {{ToXmlDoc parameter.description}}
141+     /// </param>
142+     {{ end }}
143+     /// <param name="onError">Callback when any exception was caught during watching</param>
144+     /// <param name="cancellationToken">Cancellation token</param>
145+     public IAsyncEnumerable<(WatchEventType, {{GetReturnType api.operation "T"}})> Watch{{GetActionName api.operation name "Async"}}(
146+         {{ for parameter in $filteredParams}}
147+         {{GetDotNetTypeOpenApiParameter parameter}} {{GetDotNetNameOpenApiParameter parameter "true"}},
148+         {{ end }}
149+         Action<Exception> onError = null,
150+         CancellationToken cancellationToken = default)
151+     {
152+         var responseTask = Client.{{group}}.{{GetOperationId api.operation "WithHttpMessagesAsync"}}(
153+             {{ for parameter in api.operation.parameters}}
154+             {{GetParameterValueForWatch parameter true}},
155+             {{ end }}
156+             null,
157+             cancellationToken);
158+ 
159+         return responseTask.WatchAsync<{{GetReturnType api.operation "T"}}, {{GetReturnType api.operation "TList"}}>(
160+             onError, cancellationToken);
161+     }
99162    {{end}}
100- }
163+ #endif
164+     {{end}} 
165+ }
0 commit comments