Skip to content

Commit a9f8c17

Browse files
committed
feat: allow calling with arraylike parameters
1 parent fef5f7d commit a9f8c17

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

Catglobe.CgScript.Runtime/ApiClientBase.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ internal abstract class ApiClientBase(HttpClient httpClient, ILogger<ICgScriptAp
1111
public async Task<ScriptResult<TR>> Execute<TP, TR>(string scriptName, TP parameter, JsonTypeInfo<TP> callJsonTypeInfo, JsonTypeInfo<TR> resultJsonTypeInfo, CancellationToken cancellationToken) =>
1212
await ParseResponse(await httpClient.PostAsync(await GetPath(scriptName), await GetJsonContent(scriptName, parameter, callJsonTypeInfo), cancellationToken).ConfigureAwait(false), resultJsonTypeInfo, cancellationToken);
1313

14+
public async Task<ScriptResult<TR>> ExecuteArray<TP, TR>(string scriptName, TP parameter, JsonTypeInfo<TP> callJsonTypeInfo, JsonTypeInfo<TR> resultJsonTypeInfo, CancellationToken cancellationToken) =>
15+
await ParseResponse(await httpClient.PostAsync(await GetPath(scriptName, "?expandParameters=true"), await GetJsonContent(scriptName, parameter, callJsonTypeInfo), cancellationToken).ConfigureAwait(false), resultJsonTypeInfo, cancellationToken);
16+
1417
public async Task<ScriptResult<TR>> Execute<TR>(string scriptName, JsonTypeInfo<TR> resultJsonTypeInfo, CancellationToken cancellationToken = default) =>
1518
await ParseResponse(await httpClient.PostAsync(await GetPath(scriptName, "?expandParameters=true"), await GetJsonContent(scriptName, null, (JsonTypeInfo<object>)null!), cancellationToken).ConfigureAwait(false), resultJsonTypeInfo, cancellationToken);
1619

@@ -30,6 +33,9 @@ private async Task<ScriptResult<TR>> ParseResponse<TR>(HttpResponseMessage call,
3033
[RequiresUnreferencedCode("JSON")]
3134
public async Task<ScriptResult<TR>> Execute<TP, TR>(string scriptName, TP parameter, JsonSerializerOptions? options, CancellationToken cancellationToken = default) =>
3235
await ParseResponse<TR>(await httpClient.PostAsync(await GetPath(scriptName), await GetJsonContent(scriptName, parameter, options), cancellationToken).ConfigureAwait(false), options, cancellationToken);
36+
[RequiresUnreferencedCode("JSON")]
37+
public async Task<ScriptResult<TR>> ExecuteArray<TP, TR>(string scriptName, TP parameter, JsonSerializerOptions? options, CancellationToken cancellationToken = default) =>
38+
await ParseResponse<TR>(await httpClient.PostAsync(await GetPath(scriptName, "?expandParameters=true"), await GetJsonContent(scriptName, parameter, options), cancellationToken).ConfigureAwait(false), options, cancellationToken);
3339

3440
[RequiresUnreferencedCode("JSON")]
3541
public async Task<ScriptResult<TR>> Execute<TR>(string scriptName, IReadOnlyCollection<object> parameters, JsonSerializerOptions? options = null, CancellationToken cancellationToken = default) =>

Catglobe.CgScript.Runtime/ICgScriptApiClient.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,17 @@ public interface ICgScriptApiClient
2020
/// <returns>A results object that contains the message from the server</returns>
2121
public Task<ScriptResult<TR>> Execute<TP, TR>(string scriptName, TP parameter, JsonTypeInfo<TP> callJsonTypeInfo, JsonTypeInfo<TR> resultJsonTypeInfo, CancellationToken cancellationToken = default);
2222

23+
/// <summary>
24+
/// Execute a script on the server with the parameters expanded, i.e. parameter must serialize to an array.
25+
/// </summary>
26+
/// <param name="scriptName">Name of script to run</param>
27+
/// <param name="parameter">The parameter for the script</param>
28+
/// <param name="callJsonTypeInfo">Source generator parser for the parameter</param>
29+
/// <param name="resultJsonTypeInfo">Source generator parser for the result</param>
30+
/// <param name="cancellationToken">Token to monitor for cancellation requests</param>
31+
/// <returns>A results object that contains the message from the server</returns>
32+
public Task<ScriptResult<TR>> ExecuteArray<TP, TR>(string scriptName, TP parameter, JsonTypeInfo<TP> callJsonTypeInfo, JsonTypeInfo<TR> resultJsonTypeInfo, CancellationToken cancellationToken = default);
33+
2334
/// <summary>
2435
/// Execute a script on the server.
2536
/// </summary>
@@ -43,6 +54,20 @@ public interface ICgScriptApiClient
4354
[RequiresUnreferencedCode("JSON")]
4455
public Task<ScriptResult<TR>> Execute<TP, TR>(string scriptName, TP parameter, JsonSerializerOptions? options = null, CancellationToken cancellationToken = default);
4556

57+
/// <summary>
58+
/// Execute a script on the server with the parameters expanded, i.e. parameter must serialize to an array.
59+
/// </summary>
60+
/// <remarks>
61+
/// Not recommended to use. Prefer a model that uses <see cref="ExecuteArray{TP,TR}(string,TP,JsonTypeInfo{TP},JsonTypeInfo{TR},CancellationToken)"/>.
62+
/// </remarks>
63+
/// <param name="scriptName">Name of script to run</param>
64+
/// <param name="parameter">The parameter for the script</param>
65+
/// <param name="options">Options that will tell us how to serialize parameters and deserialize result. Can be null</param>
66+
/// <param name="cancellationToken">Token to monitor for cancellation requests</param>
67+
/// <returns>A results object that contains the message from the server</returns>
68+
[RequiresUnreferencedCode("JSON")]
69+
public Task<ScriptResult<TR>> ExecuteArray<TP, TR>(string scriptName, TP parameter, JsonSerializerOptions? options = null, CancellationToken cancellationToken = default);
70+
4671
/// <summary>
4772
/// Execute a script on the server.
4873
/// </summary>

0 commit comments

Comments
 (0)