diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index b9f6941..23d3744 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,11 +3,11 @@ "isRoot": true, "tools": { "csharpier": { - "version": "1.0.1", + "version": "1.1.2", "commands": [ "csharpier" ], "rollForward": false } } -} \ No newline at end of file +} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a503ddd..00e3689 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -4,5 +4,9 @@ "name": "C# (.NET)", "image": "mcr.microsoft.com/devcontainers/dotnet:1-9.0-noble", "postAttachCommand": "cat .vscode/extensions.json | jq -r .recommendations[] | xargs -n 1 code --install-extension", - "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}" + "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + "features": { + // For the Prism mock server. + "ghcr.io/devcontainers/features/node:1": {} + } } diff --git a/.gitignore b/.gitignore index cd42ee3..08a6d80 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ +.prism.log bin/ obj/ +.vs/ +.idea/ diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 3d2ac0b..10f3091 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.1.0" + ".": "0.2.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 39d334a..57791d3 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 29 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/arcade-ai%2Farcade-engine-8446c4e394ac1eeeab4eea23ba29649287af8cf410607dc8eea7ad6ec7d39861.yml -openapi_spec_hash: 6127f3474724e78ea9875ee712cfb551 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/arcade-ai%2Farcade-engine-46ea61822976f3993310e2c139f133f450b489682d8df4c61b65c731edba8639.yml +openapi_spec_hash: 8cd802f4d9cdfa000d35792175b3b203 config_hash: 70cdb57c982c578d1961657c07b8b397 diff --git a/CHANGELOG.md b/CHANGELOG.md index 53a8496..0af90aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,82 @@ # Changelog +## 0.2.0 (2025-11-21) + +Full Changelog: [v0.1.0...v0.2.0](https://github.com/ArcadeAI/arcade-dotnet/compare/v0.1.0...v0.2.0) + +### ⚠ BREAKING CHANGES + +* **client:** improve names of some types +* **client:** flatten service namespaces +* **client:** interpret null as omitted in some properties +* **client:** make models immutable + +### Features + +* **api:** api update ([97bf4ae](https://github.com/ArcadeAI/arcade-dotnet/commit/97bf4ae13656802a9b0524f388164b293d777fbc)) +* **client:** add `HttpResponse.ReadAsStream` method ([04be863](https://github.com/ArcadeAI/arcade-dotnet/commit/04be863a4959115675d0fc28b60d74a4626e40c6)) +* **client:** add cancellation token support ([810487b](https://github.com/ArcadeAI/arcade-dotnet/commit/810487b7c6c284468df0c6153089799d06e1d11e)) +* **client:** add response validation option ([e650190](https://github.com/ArcadeAI/arcade-dotnet/commit/e65019076d4661de8c22e927e833845f85131f03)) +* **client:** add retries support ([ce12fd4](https://github.com/ArcadeAI/arcade-dotnet/commit/ce12fd4e19e9079aedc5dc550ec731e0c5f496fd)) +* **client:** add support for option modification ([5e140ed](https://github.com/ArcadeAI/arcade-dotnet/commit/5e140ed731f05741ae5137269196121e11413823)) +* **client:** additional methods for positional params ([130c438](https://github.com/ArcadeAI/arcade-dotnet/commit/130c438b3ce0878d9f5b7683b1bfec2fc7cc4653)) +* **client:** make models immutable ([8e0a84d](https://github.com/ArcadeAI/arcade-dotnet/commit/8e0a84db0afebd88e1b06d5afed561a7105e6ba1)) +* **client:** send `User-Agent` header ([c0e3c14](https://github.com/ArcadeAI/arcade-dotnet/commit/c0e3c14a08292e723553357b1453a5d54ae6847e)) +* **client:** send `X-Stainless-Arch` header ([e0698da](https://github.com/ArcadeAI/arcade-dotnet/commit/e0698daf4efe355053be9064651f5a766b8e8618)) +* **client:** send `X-Stainless-Lang` and `X-Stainless-OS` headers ([4b74b43](https://github.com/ArcadeAI/arcade-dotnet/commit/4b74b439b0cc802039a3a0a6c60513631465efa3)) +* **client:** send `X-Stainless-Package-Version` headers ([e645cb6](https://github.com/ArcadeAI/arcade-dotnet/commit/e645cb6bd2ebf723984771fa4c63e9099ddca9a2)) +* **client:** send `X-Stainless-Runtime` and `X-Stainless-Runtime-Version` ([5e6b3bd](https://github.com/ArcadeAI/arcade-dotnet/commit/5e6b3bd4c007bde0989adce4701bc06f6446aca9)) +* **client:** send `X-Stainless-Timeout` header ([b59d0db](https://github.com/ArcadeAI/arcade-dotnet/commit/b59d0db698d881af35b2de470b64b8f4de3dee55)) +* **client:** support request timeout ([96b705e](https://github.com/ArcadeAI/arcade-dotnet/commit/96b705eb58dc2e617fd0cfd3b742e44d4ee4a448)) + + +### Bug Fixes + +* **client:** interpret null as omitted in some properties ([a58c5a8](https://github.com/ArcadeAI/arcade-dotnet/commit/a58c5a8333df53103cde71cbcc19b33a8436d8f2)) + + +### Performance Improvements + +* **client:** optimize header creation ([77ed083](https://github.com/ArcadeAI/arcade-dotnet/commit/77ed08308e0061269750185035e68c1a5accc50f)) + + +### Chores + +* **client:** change name of underlying properties for models and params ([c62ebd3](https://github.com/ArcadeAI/arcade-dotnet/commit/c62ebd3112ac2d8d1e006037617b174c8216a545)) +* **client:** deprecate some symbols ([bdcd9d0](https://github.com/ArcadeAI/arcade-dotnet/commit/bdcd9d0a55f91a9a73c653d8c8ac35cef0e81cac)) +* **client:** simplify field validations ([e650190](https://github.com/ArcadeAI/arcade-dotnet/commit/e65019076d4661de8c22e927e833845f85131f03)) +* **docs:** include more properties in examples ([0fd1311](https://github.com/ArcadeAI/arcade-dotnet/commit/0fd1311cd9c8ef95efd393c6d0e72fd70c048bdd)) +* **internal:** add prism log file to gitignore ([f4ac04b](https://github.com/ArcadeAI/arcade-dotnet/commit/f4ac04bc530260f0bd0817d616abf3da4e85b317)) +* **internal:** codegen related update ([0f18e7f](https://github.com/ArcadeAI/arcade-dotnet/commit/0f18e7fdd585319545336a161ff2de93f84f4be0)) +* **internal:** codegen related update ([349eebd](https://github.com/ArcadeAI/arcade-dotnet/commit/349eebdbac15e38c9cc1670e4ae6bcf071ba54c0)) +* **internal:** delete empty test files ([39cfcbe](https://github.com/ArcadeAI/arcade-dotnet/commit/39cfcbe19af6cb08ef818cfb2737aab09a34c9bd)) +* **internal:** extract `ClientOptions` struct ([01495b2](https://github.com/ArcadeAI/arcade-dotnet/commit/01495b2ce312bbdb634946f3bc046bacc77828f0)) +* **internal:** full qualify some references ([46bb02c](https://github.com/ArcadeAI/arcade-dotnet/commit/46bb02caf8591105fcbcfcb00095ebdc506203ee)) +* **internal:** improve devcontainer ([dc3815e](https://github.com/ArcadeAI/arcade-dotnet/commit/dc3815e9f426b54479743861934e6a0a1bb10f49)) +* **internal:** minor improvements to csproj and gitignore ([64e5236](https://github.com/ArcadeAI/arcade-dotnet/commit/64e52369527198000f34ea2ba1b4d70915282b7c)) +* **internal:** reduce import qualification ([7ca8392](https://github.com/ArcadeAI/arcade-dotnet/commit/7ca8392108a2c4ca51456ff06d9352895dc3d023)) +* **internal:** update release please config ([53d3c90](https://github.com/ArcadeAI/arcade-dotnet/commit/53d3c90d587b8958d7821df52ae89abb43b8c013)) +* **internal:** update release please config ([11a9d80](https://github.com/ArcadeAI/arcade-dotnet/commit/11a9d80ae219cfeb5406a6684b1b2f6d9369268a)) + + +### Documentation + +* **client:** document `WithOptions` ([b3db621](https://github.com/ArcadeAI/arcade-dotnet/commit/b3db6211ade5a2cde44506628c6d90e4a9607fd7)) +* **client:** document max retries ([aecc000](https://github.com/ArcadeAI/arcade-dotnet/commit/aecc000dcb8d5efd6ae9c269f046e8055520f6ae)) +* **client:** document response validation ([4cac330](https://github.com/ArcadeAI/arcade-dotnet/commit/4cac3308245a9006a8b11af36ce9e786b1a8d498)) +* **client:** document timeout option ([5d23f4f](https://github.com/ArcadeAI/arcade-dotnet/commit/5d23f4f618f1ca8ff95d1a5633b519b5ba1ac34b)) +* **client:** improve snippet formatting ([868be10](https://github.com/ArcadeAI/arcade-dotnet/commit/868be107c479e66a67da081f7f701bf71e6cb826)) +* **client:** separate comment content into paragraphs ([84fc132](https://github.com/ArcadeAI/arcade-dotnet/commit/84fc132681e14125d4e611b62c86a7443b9621aa)) +* **internal:** add warning about implementing interface ([beca41f](https://github.com/ArcadeAI/arcade-dotnet/commit/beca41f3e8c8f87f1f1e037ca167e49f078414ce)) + + +### Refactors + +* **client:** flatten service namespaces ([2de54d7](https://github.com/ArcadeAI/arcade-dotnet/commit/2de54d791d1a78fc159b5d88e34856fea8449166)) +* **client:** improve names of some types ([ae85584](https://github.com/ArcadeAI/arcade-dotnet/commit/ae85584db77f44bec76c9363f1364e4f8f6d656d)) +* **client:** move some defaults out of `ClientOptions` ([3274d75](https://github.com/ArcadeAI/arcade-dotnet/commit/3274d7579686acaeb9ebd6404b3de9c048ed25e8)) +* **client:** pass around `ClientOptions` instead of client ([b2442cf](https://github.com/ArcadeAI/arcade-dotnet/commit/b2442cfa369c54a178f89147bcb1cbf2e7bc124f)) + ## 0.1.0 (2025-10-29) Full Changelog: [v0.0.1...v0.1.0](https://github.com/ArcadeAI/arcade-dotnet/compare/v0.0.1...v0.1.0) diff --git a/README.md b/README.md index 44d2c11..f1e9cf1 100644 --- a/README.md +++ b/README.md @@ -32,20 +32,29 @@ See the [`examples`](examples) directory for complete and runnable examples. ```csharp using System; +using System.Collections.Generic; +using System.Text.Json; using ArcadeDotnet; using ArcadeDotnet.Models.Tools; -// Configured using the ARCADE_API_KEY and ARCADE_BASE_URL environment variables ArcadeClient client = new(); -ToolExecuteParams parameters = new() { ToolName = "Google.ListEmails" }; +ToolExecuteParams parameters = new() +{ + ToolName = "Google.ListEmails", + Input = new Dictionary() + { + { "n_emails", JsonSerializer.SerializeToElement(10) } + }, + UserID = "user@example.com", +}; var executeToolResponse = await client.Tools.Execute(parameters); Console.WriteLine(executeToolResponse); ``` -## Client Configuration +## Client configuration Configure the client using environment variables: @@ -73,6 +82,30 @@ See this table for the available options: | `APIKey` | `ARCADE_API_KEY` | true | - | | `BaseUrl` | `ARCADE_BASE_URL` | true | `"https://api.arcade.dev"` | +### Modifying configuration + +To temporarily use a modified client configuration, while reusing the same connection and thread pools, call `WithOptions` on any client or service: + +```csharp +using System; + +var chatResponse = await client + .WithOptions(options => + options with + { + BaseUrl = new("https://example.com"), + Timeout = TimeSpan.FromSeconds(42), + } + ) + .Chat.Completions.Create(parameters); + +Console.WriteLine(chatResponse); +``` + +Using a [`with` expression](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/with-expression) makes it easy to construct the modified options. + +The `WithOptions` method does not affect the original client or service. + ## Requests and responses To send a request to the Arcade API, build an instance of some `Params` class and pass it to the corresponding client method. When the response is received, it will be deserialized into an instance of a C# class. @@ -106,6 +139,110 @@ false - `ArcadeException`: Base class for all exceptions. +## Network options + +### Retries + +The SDK automatically retries 2 times by default, with a short exponential backoff between requests. + +Only the following error types are retried: + +- Connection errors (for example, due to a network connectivity problem) +- 408 Request Timeout +- 409 Conflict +- 429 Rate Limit +- 5xx Internal + +The API may also explicitly instruct the SDK to retry or not retry a request. + +To set a custom number of retries, configure the client using the `MaxRetries` method: + +```csharp +using ArcadeDotnet; + +ArcadeClient client = new() { MaxRetries = 3 }; +``` + +Or configure a single method call using [`WithOptions`](#modifying-configuration): + +```csharp +using System; + +var chatResponse = await client + .WithOptions(options => + options with { MaxRetries = 3 } + ) + .Chat.Completions.Create(parameters); + +Console.WriteLine(chatResponse); +``` + +### Timeouts + +Requests time out after 1 minute by default. + +To set a custom timeout, configure the client using the `Timeout` option: + +```csharp +using System; +using ArcadeDotnet; + +ArcadeClient client = new() { Timeout = TimeSpan.FromSeconds(42) }; +``` + +Or configure a single method call using [`WithOptions`](#modifying-configuration): + +```csharp +using System; + +var chatResponse = await client + .WithOptions(options => + options with { Timeout = TimeSpan.FromSeconds(42) } + ) + .Chat.Completions.Create(parameters); + +Console.WriteLine(chatResponse); +``` + +## Undocumented API functionality + +The SDK is typed for convenient usage of the documented API. However, it also supports working with undocumented or not yet supported parts of the API. + +### Response validation + +In rare cases, the API may return a response that doesn't match the expected type. For example, the SDK may expect a property to contain a `string`, but the API could return something else. + +By default, the SDK will not throw an exception in this case. It will throw `ArcadeInvalidDataException` only if you directly access the property. + +If you would prefer to check that the response is completely well-typed upfront, then either call `Validate`: + +```csharp +var executeToolResponse = client.Tools.Execute(parameters); +executeToolResponse.Validate(); +``` + +Or configure the client using the `ResponseValidation` option: + +```csharp +using ArcadeDotnet; + +ArcadeClient client = new() { ResponseValidation = true }; +``` + +Or configure a single method call using [`WithOptions`](#modifying-configuration): + +```csharp +using System; + +var executeToolResponse = await client + .WithOptions(options => + options with { ResponseValidation = true } + ) + .Tools.Execute(parameters); + +Console.WriteLine(executeToolResponse); +``` + ## Semantic versioning This package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions: diff --git a/release-please-config.json b/release-please-config.json index 3804731..5975961 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -61,11 +61,11 @@ ], "release-type": "simple", "extra-files": [ - "README.md", { "type": "xml", - "path": "src/ArcadeDotnet/ArcadeDotnet.csproj", - "xpath": "//Project/PropertyGroup/VersionPrefix" + "path": "**/*.csproj", + "xpath": "//Project/PropertyGroup/VersionPrefix", + "glob": true } ] } \ No newline at end of file diff --git a/src/ArcadeDotnet.Tests/ArcadeDotnet.Tests.csproj b/src/ArcadeDotnet.Tests/ArcadeDotnet.Tests.csproj index ecb1678..996e9ac 100644 --- a/src/ArcadeDotnet.Tests/ArcadeDotnet.Tests.csproj +++ b/src/ArcadeDotnet.Tests/ArcadeDotnet.Tests.csproj @@ -1,11 +1,14 @@ net8.0 + enable false true disable $(NoWarn),xUnit1004 + + $(NoWarn),0618 diff --git a/src/ArcadeDotnet.Tests/Services/Admin/AdminServiceTest.cs b/src/ArcadeDotnet.Tests/Services/Admin/AdminServiceTest.cs deleted file mode 100644 index 17de913..0000000 --- a/src/ArcadeDotnet.Tests/Services/Admin/AdminServiceTest.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace ArcadeDotnet.Tests.Services.Admin; - -public class AdminServiceTest : TestBase { } diff --git a/src/ArcadeDotnet.Tests/Services/Admin/AuthProviders/AuthProviderServiceTest.cs b/src/ArcadeDotnet.Tests/Services/Admin/AuthProviderServiceTest.cs similarity index 80% rename from src/ArcadeDotnet.Tests/Services/Admin/AuthProviders/AuthProviderServiceTest.cs rename to src/ArcadeDotnet.Tests/Services/Admin/AuthProviderServiceTest.cs index 8f54baa..c3ee937 100644 --- a/src/ArcadeDotnet.Tests/Services/Admin/AuthProviders/AuthProviderServiceTest.cs +++ b/src/ArcadeDotnet.Tests/Services/Admin/AuthProviderServiceTest.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; -namespace ArcadeDotnet.Tests.Services.Admin.AuthProviders; +namespace ArcadeDotnet.Tests.Services.Admin; public class AuthProviderServiceTest : TestBase { @@ -23,23 +23,21 @@ public async Task List_Works() [Fact] public async Task Delete_Works() { - var authProviderResponse = await this.client.Admin.AuthProviders.Delete( - new() { ID = "id" } - ); + var authProviderResponse = await this.client.Admin.AuthProviders.Delete("id"); authProviderResponse.Validate(); } [Fact] public async Task Get_Works() { - var authProviderResponse = await this.client.Admin.AuthProviders.Get(new() { ID = "id" }); + var authProviderResponse = await this.client.Admin.AuthProviders.Get("id"); authProviderResponse.Validate(); } [Fact] public async Task Patch_Works() { - var authProviderResponse = await this.client.Admin.AuthProviders.Patch(new() { ID = "id" }); + var authProviderResponse = await this.client.Admin.AuthProviders.Patch("id"); authProviderResponse.Validate(); } } diff --git a/src/ArcadeDotnet.Tests/Services/Admin/Secrets/SecretServiceTest.cs b/src/ArcadeDotnet.Tests/Services/Admin/SecretServiceTest.cs similarity index 65% rename from src/ArcadeDotnet.Tests/Services/Admin/Secrets/SecretServiceTest.cs rename to src/ArcadeDotnet.Tests/Services/Admin/SecretServiceTest.cs index 1297168..24bb235 100644 --- a/src/ArcadeDotnet.Tests/Services/Admin/Secrets/SecretServiceTest.cs +++ b/src/ArcadeDotnet.Tests/Services/Admin/SecretServiceTest.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; -namespace ArcadeDotnet.Tests.Services.Admin.Secrets; +namespace ArcadeDotnet.Tests.Services.Admin; public class SecretServiceTest : TestBase { @@ -14,6 +14,6 @@ public async Task List_Works() [Fact] public async Task Delete_Works() { - await this.client.Admin.Secrets.Delete(new() { SecretID = "secret_id" }); + await this.client.Admin.Secrets.Delete("secret_id"); } } diff --git a/src/ArcadeDotnet.Tests/Services/Admin/UserConnections/UserConnectionServiceTest.cs b/src/ArcadeDotnet.Tests/Services/Admin/UserConnectionServiceTest.cs similarity index 65% rename from src/ArcadeDotnet.Tests/Services/Admin/UserConnections/UserConnectionServiceTest.cs rename to src/ArcadeDotnet.Tests/Services/Admin/UserConnectionServiceTest.cs index 4aa0fc7..d67deda 100644 --- a/src/ArcadeDotnet.Tests/Services/Admin/UserConnections/UserConnectionServiceTest.cs +++ b/src/ArcadeDotnet.Tests/Services/Admin/UserConnectionServiceTest.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; -namespace ArcadeDotnet.Tests.Services.Admin.UserConnections; +namespace ArcadeDotnet.Tests.Services.Admin; public class UserConnectionServiceTest : TestBase { @@ -14,6 +14,6 @@ public async Task List_Works() [Fact] public async Task Delete_Works() { - await this.client.Admin.UserConnections.Delete(new() { ID = "id" }); + await this.client.Admin.UserConnections.Delete("id"); } } diff --git a/src/ArcadeDotnet.Tests/Services/Auth/AuthServiceTest.cs b/src/ArcadeDotnet.Tests/Services/AuthServiceTest.cs similarity index 92% rename from src/ArcadeDotnet.Tests/Services/Auth/AuthServiceTest.cs rename to src/ArcadeDotnet.Tests/Services/AuthServiceTest.cs index 581e49c..4ce7990 100644 --- a/src/ArcadeDotnet.Tests/Services/Auth/AuthServiceTest.cs +++ b/src/ArcadeDotnet.Tests/Services/AuthServiceTest.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; -namespace ArcadeDotnet.Tests.Services.Auth; +namespace ArcadeDotnet.Tests.Services; public class AuthServiceTest : TestBase { diff --git a/src/ArcadeDotnet.Tests/Services/Chat/ChatServiceTest.cs b/src/ArcadeDotnet.Tests/Services/Chat/ChatServiceTest.cs deleted file mode 100644 index 4b3f303..0000000 --- a/src/ArcadeDotnet.Tests/Services/Chat/ChatServiceTest.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace ArcadeDotnet.Tests.Services.Chat; - -public class ChatServiceTest : TestBase { } diff --git a/src/ArcadeDotnet.Tests/Services/Chat/Completions/CompletionServiceTest.cs b/src/ArcadeDotnet.Tests/Services/Chat/CompletionServiceTest.cs similarity index 78% rename from src/ArcadeDotnet.Tests/Services/Chat/Completions/CompletionServiceTest.cs rename to src/ArcadeDotnet.Tests/Services/Chat/CompletionServiceTest.cs index 7f36cc6..2b87297 100644 --- a/src/ArcadeDotnet.Tests/Services/Chat/Completions/CompletionServiceTest.cs +++ b/src/ArcadeDotnet.Tests/Services/Chat/CompletionServiceTest.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; -namespace ArcadeDotnet.Tests.Services.Chat.Completions; +namespace ArcadeDotnet.Tests.Services.Chat; public class CompletionServiceTest : TestBase { diff --git a/src/ArcadeDotnet.Tests/Services/Health/HealthServiceTest.cs b/src/ArcadeDotnet.Tests/Services/HealthServiceTest.cs similarity index 79% rename from src/ArcadeDotnet.Tests/Services/Health/HealthServiceTest.cs rename to src/ArcadeDotnet.Tests/Services/HealthServiceTest.cs index fd3bfef..64a3300 100644 --- a/src/ArcadeDotnet.Tests/Services/Health/HealthServiceTest.cs +++ b/src/ArcadeDotnet.Tests/Services/HealthServiceTest.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; -namespace ArcadeDotnet.Tests.Services.Health; +namespace ArcadeDotnet.Tests.Services; public class HealthServiceTest : TestBase { diff --git a/src/ArcadeDotnet.Tests/Services/Tools/ToolServiceTest.cs b/src/ArcadeDotnet.Tests/Services/ToolServiceTest.cs similarity index 81% rename from src/ArcadeDotnet.Tests/Services/Tools/ToolServiceTest.cs rename to src/ArcadeDotnet.Tests/Services/ToolServiceTest.cs index e9b6a93..506e57a 100644 --- a/src/ArcadeDotnet.Tests/Services/Tools/ToolServiceTest.cs +++ b/src/ArcadeDotnet.Tests/Services/ToolServiceTest.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; -namespace ArcadeDotnet.Tests.Services.Tools; +namespace ArcadeDotnet.Tests.Services; public class ToolServiceTest : TestBase { @@ -30,7 +30,7 @@ public async Task Execute_Works() [Fact] public async Task Get_Works() { - var toolDefinition = await this.client.Tools.Get(new() { Name = "name" }); + var toolDefinition = await this.client.Tools.Get("name"); toolDefinition.Validate(); } } diff --git a/src/ArcadeDotnet.Tests/Services/Tools/Formatted/FormattedServiceTest.cs b/src/ArcadeDotnet.Tests/Services/Tools/FormattedServiceTest.cs similarity index 60% rename from src/ArcadeDotnet.Tests/Services/Tools/Formatted/FormattedServiceTest.cs rename to src/ArcadeDotnet.Tests/Services/Tools/FormattedServiceTest.cs index 0858427..5126884 100644 --- a/src/ArcadeDotnet.Tests/Services/Tools/Formatted/FormattedServiceTest.cs +++ b/src/ArcadeDotnet.Tests/Services/Tools/FormattedServiceTest.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; -namespace ArcadeDotnet.Tests.Services.Tools.Formatted; +namespace ArcadeDotnet.Tests.Services.Tools; public class FormattedServiceTest : TestBase { @@ -14,7 +14,6 @@ public async Task List_Works() [Fact] public async Task Get_Works() { - var formatted = await this.client.Tools.Formatted.Get(new() { Name = "name" }); - _ = formatted; + await this.client.Tools.Formatted.Get("name"); } } diff --git a/src/ArcadeDotnet.Tests/Services/Tools/Scheduled/ScheduledServiceTest.cs b/src/ArcadeDotnet.Tests/Services/Tools/ScheduledServiceTest.cs similarity index 66% rename from src/ArcadeDotnet.Tests/Services/Tools/Scheduled/ScheduledServiceTest.cs rename to src/ArcadeDotnet.Tests/Services/Tools/ScheduledServiceTest.cs index f2d582a..1e67a75 100644 --- a/src/ArcadeDotnet.Tests/Services/Tools/Scheduled/ScheduledServiceTest.cs +++ b/src/ArcadeDotnet.Tests/Services/Tools/ScheduledServiceTest.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; -namespace ArcadeDotnet.Tests.Services.Tools.Scheduled; +namespace ArcadeDotnet.Tests.Services.Tools; public class ScheduledServiceTest : TestBase { @@ -14,7 +14,7 @@ public async Task List_Works() [Fact] public async Task Get_Works() { - var scheduled = await this.client.Tools.Scheduled.Get(new() { ID = "id" }); + var scheduled = await this.client.Tools.Scheduled.Get("id"); scheduled.Validate(); } } diff --git a/src/ArcadeDotnet.Tests/Services/Workers/WorkerServiceTest.cs b/src/ArcadeDotnet.Tests/Services/WorkerServiceTest.cs similarity index 67% rename from src/ArcadeDotnet.Tests/Services/Workers/WorkerServiceTest.cs rename to src/ArcadeDotnet.Tests/Services/WorkerServiceTest.cs index 413d918..5a72795 100644 --- a/src/ArcadeDotnet.Tests/Services/Workers/WorkerServiceTest.cs +++ b/src/ArcadeDotnet.Tests/Services/WorkerServiceTest.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; -namespace ArcadeDotnet.Tests.Services.Workers; +namespace ArcadeDotnet.Tests.Services; public class WorkerServiceTest : TestBase { @@ -14,7 +14,7 @@ public async Task Create_Works() [Fact] public async Task Update_Works() { - var workerResponse = await this.client.Workers.Update(new() { ID = "id" }); + var workerResponse = await this.client.Workers.Update("id"); workerResponse.Validate(); } @@ -28,27 +28,27 @@ public async Task List_Works() [Fact] public async Task Delete_Works() { - await this.client.Workers.Delete(new() { ID = "id" }); + await this.client.Workers.Delete("id"); } [Fact] public async Task Get_Works() { - var workerResponse = await this.client.Workers.Get(new() { ID = "id" }); + var workerResponse = await this.client.Workers.Get("id"); workerResponse.Validate(); } [Fact] public async Task Health_Works() { - var workerHealthResponse = await this.client.Workers.Health(new() { ID = "id" }); + var workerHealthResponse = await this.client.Workers.Health("id"); workerHealthResponse.Validate(); } [Fact] public async Task Tools_Works() { - var page = await this.client.Workers.Tools(new() { ID = "id" }); + var page = await this.client.Workers.Tools("id"); page.Validate(); } } diff --git a/src/ArcadeDotnet/ArcadeClient.cs b/src/ArcadeDotnet/ArcadeClient.cs index 19b6a8c..0001eea 100644 --- a/src/ArcadeDotnet/ArcadeClient.cs +++ b/src/ArcadeDotnet/ArcadeClient.cs @@ -1,41 +1,67 @@ using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; using System.Net.Http; +using System.Threading; using System.Threading.Tasks; using ArcadeDotnet.Core; using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Services.Admin; -using ArcadeDotnet.Services.Auth; -using ArcadeDotnet.Services.Chat; -using ArcadeDotnet.Services.Health; -using ArcadeDotnet.Services.Tools; -using ArcadeDotnet.Services.Workers; +using ArcadeDotnet.Services; namespace ArcadeDotnet; public sealed class ArcadeClient : IArcadeClient { - public HttpClient HttpClient { get; init; } = new(); + static readonly ThreadLocal _threadLocalRandom = new(() => new Random()); + + static Random Random + { + get { return _threadLocalRandom.Value!; } + } + + readonly ClientOptions _options; + + public HttpClient HttpClient + { + get { return this._options.HttpClient; } + init { this._options.HttpClient = value; } + } - Lazy _baseUrl = new(() => - new Uri(Environment.GetEnvironmentVariable("ARCADE_BASE_URL") ?? "https://api.arcade.dev") - ); public Uri BaseUrl { - get { return _baseUrl.Value; } - init { _baseUrl = new(() => value); } + get { return this._options.BaseUrl; } + init { this._options.BaseUrl = value; } + } + + public bool ResponseValidation + { + get { return this._options.ResponseValidation; } + init { this._options.ResponseValidation = value; } + } + + public int? MaxRetries + { + get { return this._options.MaxRetries; } + init { this._options.MaxRetries = value; } + } + + public TimeSpan? Timeout + { + get { return this._options.Timeout; } + init { this._options.Timeout = value; } } - Lazy _apiKey = new(() => - Environment.GetEnvironmentVariable("ARCADE_API_KEY") - ?? throw new ArcadeInvalidDataException( - string.Format("{0} cannot be null", nameof(APIKey)), - new ArgumentNullException(nameof(APIKey)) - ) - ); public string APIKey { - get { return _apiKey.Value; } - init { _apiKey = new(() => value); } + get { return this._options.APIKey; } + init { this._options.APIKey = value; } + } + + public IArcadeClient WithOptions(Func modifier) + { + return new ArcadeClient(modifier(this._options)); } readonly Lazy _admin; @@ -74,48 +100,196 @@ public IWorkerService Workers get { return _workers.Value; } } - public async Task Execute(HttpRequest request) + public async Task Execute( + HttpRequest request, + CancellationToken cancellationToken = default + ) + where T : ParamsBase + { + var maxRetries = this.MaxRetries ?? ClientOptions.DefaultMaxRetries; + if (maxRetries <= 0) + { + return await ExecuteOnce(request, cancellationToken).ConfigureAwait(false); + } + + var retries = 0; + while (true) + { + HttpResponse? response = null; + try + { + response = await ExecuteOnce(request, cancellationToken).ConfigureAwait(false); + } + catch (Exception e) + { + if (++retries > maxRetries || !ShouldRetry(e)) + { + throw; + } + } + + if (response != null && (++retries > maxRetries || !ShouldRetry(response))) + { + if (response.Message.IsSuccessStatusCode) + { + return response; + } + + try + { + throw ArcadeExceptionFactory.CreateApiException( + response.Message.StatusCode, + await response.ReadAsString(cancellationToken).ConfigureAwait(false) + ); + } + catch (HttpRequestException e) + { + throw new ArcadeIOException("I/O Exception", e); + } + finally + { + response.Dispose(); + } + } + + var backoff = ComputeRetryBackoff(retries, response); + response?.Dispose(); + await Task.Delay(backoff, cancellationToken).ConfigureAwait(false); + } + } + + async Task ExecuteOnce( + HttpRequest request, + CancellationToken cancellationToken = default + ) where T : ParamsBase { - using HttpRequestMessage requestMessage = new(request.Method, request.Params.Url(this)) + using HttpRequestMessage requestMessage = new( + request.Method, + request.Params.Url(this._options) + ) { Content = request.Params.BodyContent(), }; - request.Params.AddHeadersToRequest(requestMessage, this); + request.Params.AddHeadersToRequest(requestMessage, this._options); + using CancellationTokenSource timeoutCts = new( + this.Timeout ?? ClientOptions.DefaultTimeout + ); + using var cts = CancellationTokenSource.CreateLinkedTokenSource( + timeoutCts.Token, + cancellationToken + ); HttpResponseMessage responseMessage; try { responseMessage = await this - .HttpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead) + .HttpClient.SendAsync( + requestMessage, + HttpCompletionOption.ResponseHeadersRead, + cts.Token + ) .ConfigureAwait(false); } - catch (HttpRequestException e1) + catch (HttpRequestException e) { - throw new ArcadeIOException("I/O exception", e1); + throw new ArcadeIOException("I/O exception", e); } - if (!responseMessage.IsSuccessStatusCode) + return new() { Message = responseMessage, CancellationToken = cts.Token }; + } + + static TimeSpan ComputeRetryBackoff(int retries, HttpResponse? response) + { + TimeSpan? apiBackoff = ParseRetryAfterMsHeader(response) ?? ParseRetryAfterHeader(response); + if (apiBackoff != null && apiBackoff < TimeSpan.FromMinutes(1)) { - try - { - throw ArcadeExceptionFactory.CreateApiException( - responseMessage.StatusCode, - await responseMessage.Content.ReadAsStringAsync().ConfigureAwait(false) - ); - } - catch (HttpRequestException e) - { - throw new ArcadeIOException("I/O Exception", e); - } - finally - { - responseMessage.Dispose(); - } + // If the API asks us to wait a certain amount of time (and it's a reasonable amount), then just + // do what it says. + return (TimeSpan)apiBackoff; + } + + // Apply exponential backoff, but not more than the max. + var backoffSeconds = Math.Min(0.5 * Math.Pow(2.0, retries - 1), 8.0); + var jitter = 1.0 - 0.25 * Random.NextDouble(); + return TimeSpan.FromSeconds(backoffSeconds * jitter); + } + + static TimeSpan? ParseRetryAfterMsHeader(HttpResponse? response) + { + IEnumerable? headerValues = null; + response?.Message.Headers.TryGetValues("Retry-After-Ms", out headerValues); + var headerValue = headerValues == null ? null : Enumerable.FirstOrDefault(headerValues); + if (headerValue == null) + { + return null; + } + + if (float.TryParse(headerValue.AsSpan(), out var retryAfterMs)) + { + return TimeSpan.FromMilliseconds(retryAfterMs); } - return new() { Message = responseMessage }; + + return null; + } + + static TimeSpan? ParseRetryAfterHeader(HttpResponse? response) + { + IEnumerable? headerValues = null; + response?.Message.Headers.TryGetValues("Retry-After", out headerValues); + var headerValue = headerValues == null ? null : Enumerable.FirstOrDefault(headerValues); + if (headerValue == null) + { + return null; + } + + if (float.TryParse(headerValue.AsSpan(), out var retryAfterSeconds)) + { + return TimeSpan.FromSeconds(retryAfterSeconds); + } + else if (DateTimeOffset.TryParse(headerValue.AsSpan(), out var retryAfterDate)) + { + return retryAfterDate - DateTimeOffset.Now; + } + + return null; + } + + static bool ShouldRetry(HttpResponse response) + { + if ( + response.Message.Headers.TryGetValues("X-Should-Retry", out var headerValues) + && bool.TryParse(Enumerable.FirstOrDefault(headerValues), out var shouldRetry) + ) + { + // If the server explicitly says whether to retry, then we obey. + return shouldRetry; + } + + return response.Message.StatusCode switch + { + // Retry on request timeouts + HttpStatusCode.RequestTimeout + or + // Retry on lock timeouts + HttpStatusCode.Conflict + or + // Retry on rate limits + HttpStatusCode.TooManyRequests + or + // Retry internal errors + >= HttpStatusCode.InternalServerError => true, + _ => false, + }; + } + + static bool ShouldRetry(Exception e) + { + return e is IOException || e is ArcadeIOException; } public ArcadeClient() { + _options = new(); + _admin = new(() => new AdminService(this)); _auth = new(() => new AuthService(this)); _health = new(() => new HealthService(this)); @@ -123,4 +297,10 @@ public ArcadeClient() _tools = new(() => new ToolService(this)); _workers = new(() => new WorkerService(this)); } + + public ArcadeClient(ClientOptions options) + : this() + { + _options = options; + } } diff --git a/src/ArcadeDotnet/ArcadeDotnet.csproj b/src/ArcadeDotnet/ArcadeDotnet.csproj index 6056029..2dc60d4 100644 --- a/src/ArcadeDotnet/ArcadeDotnet.csproj +++ b/src/ArcadeDotnet/ArcadeDotnet.csproj @@ -6,7 +6,7 @@ SDK Code Generation Arcade C# MIT enable - 0.1.0 + 0.2.0 net8.0 latest @@ -19,6 +19,8 @@ true $(NoWarn),1570,1573,1574,1591 + + $(NoWarn),0618 $(NoWarn),IL2026,IL3050 Debug;Release diff --git a/src/ArcadeDotnet/Core/ClientOptions.cs b/src/ArcadeDotnet/Core/ClientOptions.cs new file mode 100644 index 0000000..fe24066 --- /dev/null +++ b/src/ArcadeDotnet/Core/ClientOptions.cs @@ -0,0 +1,49 @@ +using System; +using System.Net.Http; +using ArcadeDotnet.Exceptions; + +namespace ArcadeDotnet.Core; + +public struct ClientOptions() +{ + public static readonly int DefaultMaxRetries = 2; + + public static readonly TimeSpan DefaultTimeout = TimeSpan.FromMinutes(1); + + public HttpClient HttpClient { get; set; } = new(); + + Lazy _baseUrl = new(() => + new Uri(Environment.GetEnvironmentVariable("ARCADE_BASE_URL") ?? "https://api.arcade.dev") + ); + public Uri BaseUrl + { + readonly get { return _baseUrl.Value; } + set { _baseUrl = new(() => value); } + } + + public bool ResponseValidation { get; set; } = false; + + public int? MaxRetries { get; set; } + + public TimeSpan? Timeout { get; set; } + + /// + /// API key used for authorization in header + /// + Lazy _apiKey = new(() => + Environment.GetEnvironmentVariable("ARCADE_API_KEY") + ?? throw new ArcadeInvalidDataException( + string.Format("{0} cannot be null", nameof(APIKey)), + new ArgumentNullException(nameof(APIKey)) + ) + ); + + /// + /// API key used for authorization in header + /// + public string APIKey + { + readonly get { return _apiKey.Value; } + set { _apiKey = new(() => value); } + } +} diff --git a/src/ArcadeDotnet/Core/FreezableDictionary.cs b/src/ArcadeDotnet/Core/FreezableDictionary.cs new file mode 100644 index 0000000..69b4fb6 --- /dev/null +++ b/src/ArcadeDotnet/Core/FreezableDictionary.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using Collections = System.Collections; + +namespace ArcadeDotnet.Core; + +/// +/// A dictionary that can be mutated and then frozen once no more mutations are expected. +/// +/// This is useful for allowing a dictionary to be modified by a class's `init` +/// properties, but then preventing it from being modified afterwards. +/// +class FreezableDictionary : IDictionary + where K : notnull +{ + IDictionary _dictionary = new Dictionary(); + + Dictionary _mutableDictionary + { + get + { + if (_dictionary is Dictionary dict) + { + return dict; + } + + throw new InvalidOperationException("Can't mutate after freezing."); + } + } + + public FreezableDictionary() { } + + public FreezableDictionary(IReadOnlyDictionary dictionary) + { + _dictionary = new Dictionary(dictionary); + } + + public FreezableDictionary(FrozenDictionary frozen) + { + _dictionary = frozen; + } + + public IReadOnlyDictionary Freeze() + { + if (_dictionary is FrozenDictionary dict) + { + return dict; + } + + var dictionary = FrozenDictionary.ToFrozenDictionary(_dictionary); + _dictionary = dictionary; + + return dictionary; + } + + public V this[K key] + { + get => _dictionary[key]; + set => _mutableDictionary[key] = value; + } + + public ICollection Keys + { + get { return _dictionary.Keys; } + } + + public ICollection Values + { + get { return _dictionary.Values; } + } + + public int Count + { + get { return _dictionary.Count; } + } + + public bool IsReadOnly + { + get { return _dictionary.IsReadOnly; } + } + + public void Add(K key, V value) + { + _mutableDictionary.Add(key, value); + } + + public void Add(KeyValuePair item) + { + _mutableDictionary.Add(item.Key, item.Value); + } + + public void Clear() + { + _mutableDictionary.Clear(); + } + + public bool Contains(KeyValuePair item) + { + return _dictionary.Contains(item); + } + + public bool ContainsKey(K key) + { + return _dictionary.ContainsKey(key); + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + _dictionary.CopyTo(array, arrayIndex); + } + + public IEnumerator> GetEnumerator() + { + return _dictionary.GetEnumerator(); + } + + public bool Remove(K key) + { + return _mutableDictionary.Remove(key); + } + + public bool Remove(KeyValuePair item) + { + return _mutableDictionary.Remove(item.Key); + } + + public bool TryGetValue(K key, [MaybeNullWhenAttribute(false)] out V value) + { + return _dictionary.TryGetValue(key, out value); + } + + Collections::IEnumerator Collections::IEnumerable.GetEnumerator() + { + return _dictionary.GetEnumerator(); + } +} diff --git a/src/ArcadeDotnet/Core/HttpResponse.cs b/src/ArcadeDotnet/Core/HttpResponse.cs index e30874b..918f23d 100644 --- a/src/ArcadeDotnet/Core/HttpResponse.cs +++ b/src/ArcadeDotnet/Core/HttpResponse.cs @@ -1,6 +1,8 @@ using System; +using System.IO; using System.Net.Http; using System.Text.Json; +using System.Threading; using System.Threading.Tasks; using ArcadeDotnet.Exceptions; @@ -10,12 +12,18 @@ public sealed class HttpResponse : IDisposable { public required HttpResponseMessage Message { get; init; } - public async Task Deserialize() + public CancellationToken CancellationToken { get; init; } = default; + + public async Task Deserialize(CancellationToken cancellationToken = default) { + using var cts = CancellationTokenSource.CreateLinkedTokenSource( + this.CancellationToken, + cancellationToken + ); try { return JsonSerializer.Deserialize( - await Message.Content.ReadAsStreamAsync().ConfigureAwait(false), + await this.ReadAsStream(cts.Token).ConfigureAwait(false), ModelBase.SerializerOptions ) ?? throw new ArcadeInvalidDataException("Response cannot be null"); } @@ -25,6 +33,24 @@ await Message.Content.ReadAsStreamAsync().ConfigureAwait(false), } } + public async Task ReadAsStream(CancellationToken cancellationToken = default) + { + using var cts = CancellationTokenSource.CreateLinkedTokenSource( + this.CancellationToken, + cancellationToken + ); + return await Message.Content.ReadAsStreamAsync(cts.Token).ConfigureAwait(false); + } + + public async Task ReadAsString(CancellationToken cancellationToken = default) + { + using var cts = CancellationTokenSource.CreateLinkedTokenSource( + this.CancellationToken, + cancellationToken + ); + return await Message.Content.ReadAsStringAsync(cts.Token).ConfigureAwait(false); + } + public void Dispose() { this.Message.Dispose(); diff --git a/src/ArcadeDotnet/Core/IVariant.cs b/src/ArcadeDotnet/Core/IVariant.cs deleted file mode 100644 index 23a224c..0000000 --- a/src/ArcadeDotnet/Core/IVariant.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace ArcadeDotnet.Core; - -interface IVariant - where TVariant : IVariant -{ - static abstract TVariant From(TValue value); - TValue Value { get; } -} diff --git a/src/ArcadeDotnet/Core/ModelBase.cs b/src/ArcadeDotnet/Core/ModelBase.cs index a973789..a0c028f 100644 --- a/src/ArcadeDotnet/Core/ModelBase.cs +++ b/src/ArcadeDotnet/Core/ModelBase.cs @@ -1,184 +1,176 @@ using System.Collections.Generic; using System.Text.Json; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.AuthorizeRequestProperties; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.BindingProperties; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties.ClientSecretProperties; -using ArcadeDotnet.Models.AuthorizationResponseProperties; -using ArcadeDotnet.Models.Tools.ExecuteToolResponseProperties.OutputProperties.ErrorProperties; -using ArcadeDotnet.Models.Tools.ToolListParamsProperties; -using AuthorizationProperties = ArcadeDotnet.Models.Tools.ToolDefinitionProperties.RequirementsProperties.AuthorizationProperties; -using AuthorizeRequestProperties = ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.AuthorizeRequestProperties; -using BindingProperties = ArcadeDotnet.Models.Admin.Secrets.SecretResponseProperties.BindingProperties; -using ClientSecretProperties = ArcadeDotnet.Models.Workers.WorkerResponseProperties.McpProperties.Oauth2Properties.ClientSecretProperties; -using ErrorProperties = ArcadeDotnet.Models.Tools.ToolExecutionAttemptProperties.OutputProperties.ErrorProperties; -using Oauth2Properties = ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties; -using RefreshRequestProperties = ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.RefreshRequestProperties; -using ResponseFormatProperties = ArcadeDotnet.Models.Chat.ChatRequestProperties.ResponseFormatProperties; -using SecretProperties = ArcadeDotnet.Models.Workers.WorkerResponseProperties.HTTPProperties.SecretProperties; -using SecretsItemProperties = ArcadeDotnet.Models.Workers.WorkerResponseProperties.McpProperties.SecretsProperties.SecretsItemProperties; -using TokenIntrospectionRequestProperties = ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.TokenIntrospectionRequestProperties; -using TokenRequestProperties = ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.TokenRequestProperties; -using ToolCallProperties = ArcadeDotnet.Models.Chat.ChatMessageProperties.ToolCallProperties; -using ToolGetParamsProperties = ArcadeDotnet.Models.Tools.ToolGetParamsProperties; -using UserInfoRequestProperties = ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.UserInfoRequestProperties; -using WorkerResponseProperties = ArcadeDotnet.Models.Workers.WorkerResponseProperties; +using ArcadeDotnet.Models; +using ArcadeDotnet.Models.Admin.Secrets; +using AuthProviders = ArcadeDotnet.Models.Admin.AuthProviders; +using Chat = ArcadeDotnet.Models.Chat; +using Completions = ArcadeDotnet.Models.Chat.Completions; +using Tools = ArcadeDotnet.Models.Tools; +using Workers = ArcadeDotnet.Models.Workers; namespace ArcadeDotnet.Core; public abstract record class ModelBase { - public Dictionary Properties { get; set; } = []; + private protected FreezableDictionary _rawData = []; + + public IReadOnlyDictionary RawData + { + get { return this._rawData.Freeze(); } + } internal static readonly JsonSerializerOptions SerializerOptions = new() { Converters = { new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), new ApiEnumConverter< string, - TokenIntrospectionRequestProperties::ResponseContentType + AuthProviders::AuthProviderCreateRequestOauth2AuthorizeRequestRequestContentType >(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.RefreshRequestProperties.RequestContentType + AuthProviders::AuthProviderCreateRequestOauth2AuthorizeRequestResponseContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.RefreshRequestProperties.ResponseContentType + AuthProviders::AuthProviderCreateRequestOauth2RefreshRequestRequestContentType >(), - new ApiEnumConverter(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.TokenRequestProperties.RequestContentType + AuthProviders::AuthProviderCreateRequestOauth2RefreshRequestResponseContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.TokenRequestProperties.ResponseContentType + AuthProviders::AuthProviderCreateRequestOauth2ScopeDelimiter >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.UserInfoRequestProperties.RequestContentType + AuthProviders::AuthProviderCreateRequestOauth2TokenIntrospectionRequestRequestContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.UserInfoRequestProperties.ResponseContentType + AuthProviders::AuthProviderCreateRequestOauth2TokenIntrospectionRequestResponseContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.AuthorizeRequestProperties.RequestContentType + AuthProviders::AuthProviderCreateRequestOauth2TokenRequestRequestContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.AuthorizeRequestProperties.ResponseContentType + AuthProviders::AuthProviderCreateRequestOauth2TokenRequestResponseContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.RefreshRequestProperties.RequestContentType + AuthProviders::AuthProviderCreateRequestOauth2UserInfoRequestRequestContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.RefreshRequestProperties.ResponseContentType + AuthProviders::AuthProviderCreateRequestOauth2UserInfoRequestResponseContentType >(), + new ApiEnumConverter(), + new ApiEnumConverter(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.ScopeDelimiter + AuthProviders::AuthProviderUpdateRequestOauth2AuthorizeRequestRequestContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.TokenIntrospectionRequestProperties.RequestContentType + AuthProviders::AuthProviderUpdateRequestOauth2AuthorizeRequestResponseContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.TokenIntrospectionRequestProperties.ResponseContentType + AuthProviders::AuthProviderUpdateRequestOauth2RefreshRequestRequestContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.TokenRequestProperties.RequestContentType + AuthProviders::AuthProviderUpdateRequestOauth2RefreshRequestResponseContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.TokenRequestProperties.ResponseContentType + AuthProviders::AuthProviderUpdateRequestOauth2ScopeDelimiter >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.UserInfoRequestProperties.RequestContentType + AuthProviders::AuthProviderUpdateRequestOauth2TokenRequestRequestContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.UserInfoRequestProperties.ResponseContentType + AuthProviders::AuthProviderUpdateRequestOauth2TokenRequestResponseContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.AuthorizeRequestProperties.RequestContentType + AuthProviders::AuthProviderUpdateRequestOauth2UserInfoRequestRequestContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.AuthorizeRequestProperties.ResponseContentType + AuthProviders::AuthProviderUpdateRequestOauth2UserInfoRequestResponseContentType >(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.RefreshRequestProperties.RequestContentType + AuthProviders::TokenIntrospectionRequestRequestContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.RefreshRequestProperties.ResponseContentType + AuthProviders::TokenIntrospectionRequestResponseContentType >(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.ScopeDelimiter + AuthProviders::Oauth2ModelAuthorizeRequestRequestContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.TokenRequestProperties.RequestContentType + AuthProviders::Oauth2ModelAuthorizeRequestResponseContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.TokenRequestProperties.ResponseContentType + AuthProviders::Oauth2ModelRefreshRequestRequestContentType >(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.UserInfoRequestProperties.RequestContentType + AuthProviders::Oauth2ModelRefreshRequestResponseContentType >(), + new ApiEnumConverter(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.UserInfoRequestProperties.ResponseContentType + AuthProviders::Oauth2ModelTokenRequestRequestContentType >(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Chat.Completions.CompletionCreateParamsProperties.ResponseFormatProperties.Type + AuthProviders::Oauth2ModelTokenRequestResponseContentType >(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), new ApiEnumConverter< string, - global::ArcadeDotnet.Models.Workers.WorkerResponseProperties.BindingProperties.Type + AuthProviders::Oauth2ModelUserInfoRequestRequestContentType >(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), - new ApiEnumConverter(), + new ApiEnumConverter< + string, + AuthProviders::Oauth2ModelUserInfoRequestResponseContentType + >(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), + new ApiEnumConverter(), }, }; @@ -189,13 +181,18 @@ public abstract record class ModelBase public sealed override string? ToString() { - return JsonSerializer.Serialize(this.Properties, _toStringSerializerOptions); + return JsonSerializer.Serialize(this.RawData, _toStringSerializerOptions); } public abstract void Validate(); } +/// +/// NOTE: Do not inherit from this type outside the SDK unless you're okay with breaking +/// changes in non-major versions. We may add new methods in the future that cause +/// existing derived classes to break. +/// interface IFromRaw { - static abstract T FromRawUnchecked(Dictionary properties); + static abstract T FromRawUnchecked(IReadOnlyDictionary rawData); } diff --git a/src/ArcadeDotnet/Core/ModelConverter.cs b/src/ArcadeDotnet/Core/ModelConverter.cs index 22542b3..f80cc3c 100644 --- a/src/ArcadeDotnet/Core/ModelConverter.cs +++ b/src/ArcadeDotnet/Core/ModelConverter.cs @@ -14,17 +14,18 @@ sealed class ModelConverter : JsonConverter JsonSerializerOptions options ) { - Dictionary? properties = JsonSerializer.Deserialize< - Dictionary - >(ref reader, options); - if (properties == null) + var rawData = JsonSerializer.Deserialize>( + ref reader, + options + ); + if (rawData == null) return null; - return TModel.FromRawUnchecked(properties); + return TModel.FromRawUnchecked(rawData); } public override void Write(Utf8JsonWriter writer, TModel value, JsonSerializerOptions options) { - JsonSerializer.Serialize(writer, value.Properties, options); + JsonSerializer.Serialize(writer, value.RawData, options); } } diff --git a/src/ArcadeDotnet/Core/ParamsBase.cs b/src/ArcadeDotnet/Core/ParamsBase.cs index d2d142a..67cd392 100644 --- a/src/ArcadeDotnet/Core/ParamsBase.cs +++ b/src/ArcadeDotnet/Core/ParamsBase.cs @@ -3,19 +3,48 @@ using System.Collections.Specialized; using System.Linq; using System.Net.Http; +using System.Reflection; +using System.Runtime.InteropServices; using System.Text; using System.Text.Json; -using Web = System.Web; +using System.Web; namespace ArcadeDotnet.Core; public abstract record class ParamsBase { - public Dictionary QueryProperties { get; set; } = []; + static readonly IReadOnlyDictionary s_defaultHeaders; - public Dictionary HeaderProperties { get; set; } = []; + static ParamsBase() + { + var runtime = GetRuntime(); + s_defaultHeaders = new Dictionary + { + ["User-Agent"] = GetUserAgent(), + ["X-Stainless-Arch"] = GetOSArch(), + ["X-Stainless-Lang"] = "csharp", + ["X-Stainless-OS"] = GetOS(), + ["X-Stainless-Package-Version"] = GetPackageVersion(), + ["X-Stainless-Runtime"] = runtime.Name, + ["X-Stainless-Runtime-Version"] = runtime.Version, + }; + } + + private protected FreezableDictionary _rawQueryData = []; + + public IReadOnlyDictionary RawQueryData + { + get { return this._rawQueryData.Freeze(); } + } + + private protected FreezableDictionary _rawHeaderData = []; + + public IReadOnlyDictionary RawHeaderData + { + get { return this._rawHeaderData.Freeze(); } + } - public abstract Uri Url(IArcadeClient client); + public abstract Uri Url(ClientOptions options); protected static void AddQueryElementToCollection( NameValueCollection collection, @@ -121,10 +150,10 @@ JsonElement element } } - protected string QueryString(IArcadeClient client) + protected string QueryString(ClientOptions options) { NameValueCollection collection = []; - foreach (var item in this.QueryProperties) + foreach (var item in this.RawQueryData) { ParamsBase.AddQueryElementToCollection(collection, item.Key, item.Value); } @@ -139,26 +168,95 @@ protected string QueryString(IArcadeClient client) sb.Append('&'); } first = false; - sb.Append(Web::HttpUtility.UrlEncode(key)); + sb.Append(HttpUtility.UrlEncode(key)); sb.Append('='); - sb.Append(Web::HttpUtility.UrlEncode(value)); + sb.Append(HttpUtility.UrlEncode(value)); } } return sb.ToString(); } - internal abstract void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client); + internal abstract void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options); internal virtual StringContent? BodyContent() { return null; } - protected static void AddDefaultHeaders(HttpRequestMessage request, IArcadeClient client) + protected static void AddDefaultHeaders(HttpRequestMessage request, ClientOptions options) { - if (client.APIKey != null) + foreach (var header in s_defaultHeaders) + { + request.Headers.Add(header.Key, header.Value); + } + + if (options.APIKey != null) { - request.Headers.Add("Authorization", client.APIKey); + request.Headers.Add("Authorization", options.APIKey); } + request.Headers.Add( + "X-Stainless-Timeout", + (options.Timeout ?? ClientOptions.DefaultTimeout).TotalSeconds.ToString() + ); } + + static string GetUserAgent() => $"{typeof(ArcadeClient).Name}/C# {GetPackageVersion()}"; + + static string GetOSArch() => + RuntimeInformation.OSArchitecture switch + { + Architecture.X86 => "x32", + Architecture.X64 => "x64", + Architecture.Arm => "arm", + Architecture.Arm64 or Architecture.Armv6 => "arm64", + Architecture.Wasm + or Architecture.S390x + or Architecture.LoongArch64 + or Architecture.Ppc64le => $"other:{RuntimeInformation.OSArchitecture}", + _ => "unknown", + }; + + static string GetOS() + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + return "Windows"; + } + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + return "MacOS"; + } + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + return "Linux"; + } + return $"Other:{RuntimeInformation.OSDescription}"; + } + + static string GetPackageVersion() => + Assembly + .GetExecutingAssembly() + .GetCustomAttribute() + ?.InformationalVersion + ?? "unknown"; + + static Runtime GetRuntime() + { + var runtimeDescription = RuntimeInformation.FrameworkDescription; + var lastSpaceIndex = runtimeDescription.LastIndexOf(' '); + if (lastSpaceIndex == -1) + { + return new() { Name = runtimeDescription, Version = "unknown" }; + } + + var name = runtimeDescription[..lastSpaceIndex].Trim(); + var version = runtimeDescription[(lastSpaceIndex + 1)..].Trim(); + return new() + { + Name = name.Length == 0 ? "unknown" : name, + Version = version.Length == 0 ? "unknown" : version, + }; + } + + readonly record struct Runtime(string Name, string Version); } diff --git a/src/ArcadeDotnet/IArcadeClient.cs b/src/ArcadeDotnet/IArcadeClient.cs index 3fed6be..5097c16 100644 --- a/src/ArcadeDotnet/IArcadeClient.cs +++ b/src/ArcadeDotnet/IArcadeClient.cs @@ -1,27 +1,36 @@ using System; using System.Net.Http; +using System.Threading; using System.Threading.Tasks; using ArcadeDotnet.Core; -using ArcadeDotnet.Services.Admin; -using ArcadeDotnet.Services.Auth; -using ArcadeDotnet.Services.Chat; -using ArcadeDotnet.Services.Health; -using ArcadeDotnet.Services.Tools; -using ArcadeDotnet.Services.Workers; +using ArcadeDotnet.Services; namespace ArcadeDotnet; +/// +/// NOTE: Do not inherit from this type outside the SDK unless you're okay with breaking +/// changes in non-major versions. We may add new methods in the future that cause +/// existing derived classes to break. +/// public interface IArcadeClient { HttpClient HttpClient { get; init; } Uri BaseUrl { get; init; } + bool ResponseValidation { get; init; } + + int? MaxRetries { get; init; } + + TimeSpan? Timeout { get; init; } + /// /// API key used for authorization in header /// string APIKey { get; init; } + IArcadeClient WithOptions(Func modifier); + IAdminService Admin { get; } IAuthService Auth { get; } @@ -34,6 +43,9 @@ public interface IArcadeClient IWorkerService Workers { get; } - Task Execute(HttpRequest request) + Task Execute( + HttpRequest request, + CancellationToken cancellationToken = default + ) where T : ParamsBase; } diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParams.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParams.cs index 379cbc2..c235878 100644 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParams.cs +++ b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParams.cs @@ -1,11 +1,13 @@ -using System; +using System.Collections.Frozen; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text; using System.Text.Json; +using System.Text.Json.Serialization; using ArcadeDotnet.Core; using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties; +using System = System; namespace ArcadeDotnet.Models.Admin.AuthProviders; @@ -14,27 +16,31 @@ namespace ArcadeDotnet.Models.Admin.AuthProviders; /// public sealed record class AuthProviderCreateParams : ParamsBase { - public Dictionary BodyProperties { get; set; } = []; + readonly FreezableDictionary _rawBodyData = []; + public IReadOnlyDictionary RawBodyData + { + get { return this._rawBodyData.Freeze(); } + } public required string ID { get { - if (!this.BodyProperties.TryGetValue("id", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("id", out JsonElement element)) throw new ArcadeInvalidDataException( "'id' cannot be null", - new ArgumentOutOfRangeException("id", "Missing required argument") + new System::ArgumentOutOfRangeException("id", "Missing required argument") ); return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) ?? throw new ArcadeInvalidDataException( "'id' cannot be null", - new ArgumentNullException("id") + new System::ArgumentNullException("id") ); } - set + init { - this.BodyProperties["id"] = JsonSerializer.SerializeToElement( + this._rawBodyData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -45,14 +51,19 @@ public string? Description { get { - if (!this.BodyProperties.TryGetValue("description", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("description", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["description"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["description"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -66,14 +77,19 @@ public string? ExternalID { get { - if (!this.BodyProperties.TryGetValue("external_id", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("external_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["external_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["external_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -84,14 +100,19 @@ public Oauth2? Oauth2 { get { - if (!this.BodyProperties.TryGetValue("oauth2", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("oauth2", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["oauth2"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["oauth2"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -102,14 +123,19 @@ public string? ProviderID { get { - if (!this.BodyProperties.TryGetValue("provider_id", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("provider_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["provider_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["provider_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -120,14 +146,19 @@ public string? Status { get { - if (!this.BodyProperties.TryGetValue("status", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("status", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["status"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["status"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -138,43 +169,2349 @@ public string? Type { get { - if (!this.BodyProperties.TryGetValue("type", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("type", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["type"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["type"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public AuthProviderCreateParams() { } + + public AuthProviderCreateParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderCreateParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData, + FrozenDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } +#pragma warning restore CS8618 + + public static AuthProviderCreateParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData), + FrozenDictionary.ToFrozenDictionary(rawBodyData) + ); + } + + public override System::Uri Url(ClientOptions options) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/admin/auth_providers") + return new System::UriBuilder( + options.BaseUrl.ToString().TrimEnd('/') + "/v1/admin/auth_providers" + ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } internal override StringContent? BodyContent() { - return new( - JsonSerializer.Serialize(this.BodyProperties), - Encoding.UTF8, - "application/json" - ); + return new(JsonSerializer.Serialize(this.RawBodyData), Encoding.UTF8, "application/json"); } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } } } + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Oauth2 : ModelBase, IFromRaw +{ + public required string ClientID + { + get + { + if (!this._rawData.TryGetValue("client_id", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'client_id' cannot be null", + new System::ArgumentOutOfRangeException( + "client_id", + "Missing required argument" + ) + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'client_id' cannot be null", + new System::ArgumentNullException("client_id") + ); + } + init + { + this._rawData["client_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthorizeRequest? AuthorizeRequest + { + get + { + if (!this._rawData.TryGetValue("authorize_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["authorize_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientSecret + { + get + { + if (!this._rawData.TryGetValue("client_secret", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Pkce? Pkce + { + get + { + if (!this._rawData.TryGetValue("pkce", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["pkce"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public RefreshRequest? RefreshRequest + { + get + { + if (!this._rawData.TryGetValue("refresh_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["refresh_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? ScopeDelimiter + { + get + { + if (!this._rawData.TryGetValue("scope_delimiter", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["scope_delimiter"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public TokenIntrospectionRequest? TokenIntrospectionRequest + { + get + { + if (!this._rawData.TryGetValue("token_introspection_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["token_introspection_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public TokenRequest? TokenRequest + { + get + { + if (!this._rawData.TryGetValue("token_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["token_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public UserInfoRequest? UserInfoRequest + { + get + { + if (!this._rawData.TryGetValue("user_info_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["user_info_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.ClientID; + this.AuthorizeRequest?.Validate(); + _ = this.ClientSecret; + this.Pkce?.Validate(); + this.RefreshRequest?.Validate(); + this.ScopeDelimiter?.Validate(); + this.TokenIntrospectionRequest?.Validate(); + this.TokenRequest?.Validate(); + this.UserInfoRequest?.Validate(); + } + + public Oauth2() { } + + public Oauth2(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Oauth2(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Oauth2 FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } + + [SetsRequiredMembers] + public Oauth2(string clientID) + : this() + { + this.ClientID = clientID; + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthorizeRequest : ModelBase, IFromRaw +{ + public required string Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentOutOfRangeException("endpoint", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentNullException("endpoint") + ); + } + init + { + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Endpoint; + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public AuthorizeRequest() { } + + public AuthorizeRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthorizeRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthorizeRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } + + [SetsRequiredMembers] + public AuthorizeRequest(string endpoint) + : this() + { + this.Endpoint = endpoint; + } +} + +[JsonConverter(typeof(RequestContentTypeConverter))] +public enum RequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class RequestContentTypeConverter : JsonConverter +{ + public override RequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => RequestContentType.ApplicationJson, + _ => (RequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + RequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + RequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + RequestContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ResponseContentTypeConverter))] +public enum ResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class ResponseContentTypeConverter : JsonConverter +{ + public override ResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + ResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => ResponseContentType.ApplicationJson, + _ => (ResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + ResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + ResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + ResponseContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Pkce : ModelBase, IFromRaw +{ + public string? CodeChallengeMethod + { + get + { + if (!this._rawData.TryGetValue("code_challenge_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["code_challenge_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Enabled + { + get + { + if (!this._rawData.TryGetValue("enabled", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["enabled"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.CodeChallengeMethod; + _ = this.Enabled; + } + + public Pkce() { } + + public Pkce(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Pkce(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Pkce FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class RefreshRequest : ModelBase, IFromRaw +{ + public required string Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentOutOfRangeException("endpoint", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentNullException("endpoint") + ); + } + init + { + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Endpoint; + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public RefreshRequest() { } + + public RefreshRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + RefreshRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static RefreshRequest FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } + + [SetsRequiredMembers] + public RefreshRequest(string endpoint) + : this() + { + this.Endpoint = endpoint; + } +} + +[JsonConverter(typeof(RefreshRequestRequestContentTypeConverter))] +public enum RefreshRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class RefreshRequestRequestContentTypeConverter + : JsonConverter +{ + public override RefreshRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + RefreshRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => RefreshRequestRequestContentType.ApplicationJson, + _ => (RefreshRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + RefreshRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + RefreshRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + RefreshRequestRequestContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(RefreshRequestResponseContentTypeConverter))] +public enum RefreshRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class RefreshRequestResponseContentTypeConverter + : JsonConverter +{ + public override RefreshRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + RefreshRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => RefreshRequestResponseContentType.ApplicationJson, + _ => (RefreshRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + RefreshRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + RefreshRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + RefreshRequestResponseContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ScopeDelimiterConverter))] +public enum ScopeDelimiter +{ + Undefined, + V1, +} + +sealed class ScopeDelimiterConverter : JsonConverter +{ + public override ScopeDelimiter Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "," => ScopeDelimiter.Undefined, + " " => ScopeDelimiter.V1, + _ => (ScopeDelimiter)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + ScopeDelimiter value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + ScopeDelimiter.Undefined => ",", + ScopeDelimiter.V1 => " ", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class TokenIntrospectionRequest + : ModelBase, + IFromRaw +{ + public required string Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentOutOfRangeException("endpoint", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentNullException("endpoint") + ); + } + init + { + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required Triggers Triggers + { + get + { + if (!this._rawData.TryGetValue("triggers", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'triggers' cannot be null", + new System::ArgumentOutOfRangeException("triggers", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'triggers' cannot be null", + new System::ArgumentNullException("triggers") + ); + } + init + { + this._rawData["triggers"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Endpoint; + this.Triggers.Validate(); + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public TokenIntrospectionRequest() { } + + public TokenIntrospectionRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + TokenIntrospectionRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static TokenIntrospectionRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Triggers : ModelBase, IFromRaw +{ + public bool? OnTokenGrant + { + get + { + if (!this._rawData.TryGetValue("on_token_grant", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_grant"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? OnTokenRefresh + { + get + { + if (!this._rawData.TryGetValue("on_token_refresh", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_refresh"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.OnTokenGrant; + _ = this.OnTokenRefresh; + } + + public Triggers() { } + + public Triggers(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Triggers(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Triggers FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(TokenIntrospectionRequestRequestContentTypeConverter))] +public enum TokenIntrospectionRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class TokenIntrospectionRequestRequestContentTypeConverter + : JsonConverter +{ + public override TokenIntrospectionRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + TokenIntrospectionRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => TokenIntrospectionRequestRequestContentType.ApplicationJson, + _ => (TokenIntrospectionRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + TokenIntrospectionRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + TokenIntrospectionRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + TokenIntrospectionRequestRequestContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(TokenIntrospectionRequestResponseContentTypeConverter))] +public enum TokenIntrospectionRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class TokenIntrospectionRequestResponseContentTypeConverter + : JsonConverter +{ + public override TokenIntrospectionRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + TokenIntrospectionRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => TokenIntrospectionRequestResponseContentType.ApplicationJson, + _ => (TokenIntrospectionRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + TokenIntrospectionRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + TokenIntrospectionRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + TokenIntrospectionRequestResponseContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class TokenRequest : ModelBase, IFromRaw +{ + public required string Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentOutOfRangeException("endpoint", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentNullException("endpoint") + ); + } + init + { + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Endpoint; + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public TokenRequest() { } + + public TokenRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + TokenRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static TokenRequest FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } + + [SetsRequiredMembers] + public TokenRequest(string endpoint) + : this() + { + this.Endpoint = endpoint; + } +} + +[JsonConverter(typeof(TokenRequestRequestContentTypeConverter))] +public enum TokenRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class TokenRequestRequestContentTypeConverter : JsonConverter +{ + public override TokenRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + TokenRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => TokenRequestRequestContentType.ApplicationJson, + _ => (TokenRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + TokenRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + TokenRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + TokenRequestRequestContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(TokenRequestResponseContentTypeConverter))] +public enum TokenRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class TokenRequestResponseContentTypeConverter + : JsonConverter +{ + public override TokenRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + TokenRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => TokenRequestResponseContentType.ApplicationJson, + _ => (TokenRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + TokenRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + TokenRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + TokenRequestResponseContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class UserInfoRequest : ModelBase, IFromRaw +{ + public required string Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentOutOfRangeException("endpoint", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentNullException("endpoint") + ); + } + init + { + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required UserInfoRequestTriggers Triggers + { + get + { + if (!this._rawData.TryGetValue("triggers", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'triggers' cannot be null", + new System::ArgumentOutOfRangeException("triggers", "Missing required argument") + ); + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ) + ?? throw new ArcadeInvalidDataException( + "'triggers' cannot be null", + new System::ArgumentNullException("triggers") + ); + } + init + { + this._rawData["triggers"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Endpoint; + this.Triggers.Validate(); + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public UserInfoRequest() { } + + public UserInfoRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + UserInfoRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static UserInfoRequest FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class UserInfoRequestTriggers : ModelBase, IFromRaw +{ + public bool? OnTokenGrant + { + get + { + if (!this._rawData.TryGetValue("on_token_grant", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_grant"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? OnTokenRefresh + { + get + { + if (!this._rawData.TryGetValue("on_token_refresh", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_refresh"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.OnTokenGrant; + _ = this.OnTokenRefresh; + } + + public UserInfoRequestTriggers() { } + + public UserInfoRequestTriggers(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + UserInfoRequestTriggers(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static UserInfoRequestTriggers FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(UserInfoRequestRequestContentTypeConverter))] +public enum UserInfoRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class UserInfoRequestRequestContentTypeConverter + : JsonConverter +{ + public override UserInfoRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + UserInfoRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => UserInfoRequestRequestContentType.ApplicationJson, + _ => (UserInfoRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + UserInfoRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + UserInfoRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + UserInfoRequestRequestContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(UserInfoRequestResponseContentTypeConverter))] +public enum UserInfoRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class UserInfoRequestResponseContentTypeConverter + : JsonConverter +{ + public override UserInfoRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + UserInfoRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => UserInfoRequestResponseContentType.ApplicationJson, + _ => (UserInfoRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + UserInfoRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + UserInfoRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + UserInfoRequestResponseContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2.cs deleted file mode 100644 index 2f6c6b4..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2.cs +++ /dev/null @@ -1,235 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Oauth2 : ModelBase, IFromRaw -{ - public required string ClientID - { - get - { - if (!this.Properties.TryGetValue("client_id", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'client_id' cannot be null", - new ArgumentOutOfRangeException("client_id", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'client_id' cannot be null", - new ArgumentNullException("client_id") - ); - } - set - { - this.Properties["client_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public AuthorizeRequest? AuthorizeRequest - { - get - { - if (!this.Properties.TryGetValue("authorize_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["authorize_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientSecret - { - get - { - if (!this.Properties.TryGetValue("client_secret", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Pkce? Pkce - { - get - { - if (!this.Properties.TryGetValue("pkce", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["pkce"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public RefreshRequest? RefreshRequest - { - get - { - if (!this.Properties.TryGetValue("refresh_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["refresh_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ScopeDelimiter - { - get - { - if (!this.Properties.TryGetValue("scope_delimiter", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["scope_delimiter"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public TokenIntrospectionRequest? TokenIntrospectionRequest - { - get - { - if ( - !this.Properties.TryGetValue("token_introspection_request", out JsonElement element) - ) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["token_introspection_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public TokenRequest? TokenRequest - { - get - { - if (!this.Properties.TryGetValue("token_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["token_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public UserInfoRequest? UserInfoRequest - { - get - { - if (!this.Properties.TryGetValue("user_info_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["user_info_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.ClientID; - this.AuthorizeRequest?.Validate(); - _ = this.ClientSecret; - this.Pkce?.Validate(); - this.RefreshRequest?.Validate(); - this.ScopeDelimiter?.Validate(); - this.TokenIntrospectionRequest?.Validate(); - this.TokenRequest?.Validate(); - this.UserInfoRequest?.Validate(); - } - - public Oauth2() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Oauth2(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Oauth2 FromRawUnchecked(Dictionary properties) - { - return new(properties); - } - - [SetsRequiredMembers] - public Oauth2(string clientID) - : this() - { - this.ClientID = clientID; - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/AuthorizeRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/AuthorizeRequest.cs deleted file mode 100644 index a23e93a..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/AuthorizeRequest.cs +++ /dev/null @@ -1,204 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.AuthorizeRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class AuthorizeRequest : ModelBase, IFromRaw -{ - public required string Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentOutOfRangeException("endpoint", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentNullException("endpoint") - ); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Endpoint; - _ = this.AuthMethod; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public AuthorizeRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - AuthorizeRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static AuthorizeRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } - - [SetsRequiredMembers] - public AuthorizeRequest(string endpoint) - : this() - { - this.Endpoint = endpoint; - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/AuthorizeRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/AuthorizeRequestProperties/RequestContentType.cs deleted file mode 100644 index b1618e6..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/AuthorizeRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.AuthorizeRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/AuthorizeRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/AuthorizeRequestProperties/ResponseContentType.cs deleted file mode 100644 index 4a97579..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/AuthorizeRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.AuthorizeRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/Pkce.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/Pkce.cs deleted file mode 100644 index 53c6eea..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/Pkce.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Pkce : ModelBase, IFromRaw -{ - public string? CodeChallengeMethod - { - get - { - if (!this.Properties.TryGetValue("code_challenge_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["code_challenge_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Enabled - { - get - { - if (!this.Properties.TryGetValue("enabled", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["enabled"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.CodeChallengeMethod; - _ = this.Enabled; - } - - public Pkce() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Pkce(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Pkce FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/RefreshRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/RefreshRequest.cs deleted file mode 100644 index 1fa135d..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/RefreshRequest.cs +++ /dev/null @@ -1,204 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.RefreshRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class RefreshRequest : ModelBase, IFromRaw -{ - public required string Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentOutOfRangeException("endpoint", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentNullException("endpoint") - ); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Endpoint; - _ = this.AuthMethod; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public RefreshRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - RefreshRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static RefreshRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } - - [SetsRequiredMembers] - public RefreshRequest(string endpoint) - : this() - { - this.Endpoint = endpoint; - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/RefreshRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/RefreshRequestProperties/RequestContentType.cs deleted file mode 100644 index 3b37e21..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/RefreshRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.RefreshRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/RefreshRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/RefreshRequestProperties/ResponseContentType.cs deleted file mode 100644 index 4d9c024..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/RefreshRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.RefreshRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/ScopeDelimiter.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/ScopeDelimiter.cs deleted file mode 100644 index 49147ea..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/ScopeDelimiter.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties; - -[JsonConverter(typeof(ScopeDelimiterConverter))] -public enum ScopeDelimiter -{ - Undefined, - V1, -} - -sealed class ScopeDelimiterConverter : JsonConverter -{ - public override ScopeDelimiter Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "," => ScopeDelimiter.Undefined, - " " => ScopeDelimiter.V1, - _ => (ScopeDelimiter)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ScopeDelimiter value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ScopeDelimiter.Undefined => ",", - ScopeDelimiter.V1 => " ", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenIntrospectionRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenIntrospectionRequest.cs deleted file mode 100644 index 06b20f8..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenIntrospectionRequest.cs +++ /dev/null @@ -1,227 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.TokenIntrospectionRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class TokenIntrospectionRequest - : ModelBase, - IFromRaw -{ - public required string Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentOutOfRangeException("endpoint", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentNullException("endpoint") - ); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required Triggers Triggers - { - get - { - if (!this.Properties.TryGetValue("triggers", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'triggers' cannot be null", - new ArgumentOutOfRangeException("triggers", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'triggers' cannot be null", - new ArgumentNullException("triggers") - ); - } - set - { - this.Properties["triggers"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Endpoint; - this.Triggers.Validate(); - _ = this.AuthMethod; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public TokenIntrospectionRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - TokenIntrospectionRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static TokenIntrospectionRequest FromRawUnchecked( - Dictionary properties - ) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenIntrospectionRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenIntrospectionRequestProperties/RequestContentType.cs deleted file mode 100644 index a72741e..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenIntrospectionRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.TokenIntrospectionRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenIntrospectionRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenIntrospectionRequestProperties/ResponseContentType.cs deleted file mode 100644 index 94448bb..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenIntrospectionRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.TokenIntrospectionRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenIntrospectionRequestProperties/Triggers.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenIntrospectionRequestProperties/Triggers.cs deleted file mode 100644 index 2faef27..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenIntrospectionRequestProperties/Triggers.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.TokenIntrospectionRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Triggers : ModelBase, IFromRaw -{ - public bool? OnTokenGrant - { - get - { - if (!this.Properties.TryGetValue("on_token_grant", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_grant"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? OnTokenRefresh - { - get - { - if (!this.Properties.TryGetValue("on_token_refresh", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_refresh"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.OnTokenGrant; - _ = this.OnTokenRefresh; - } - - public Triggers() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Triggers(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Triggers FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenRequest.cs deleted file mode 100644 index c8cec01..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenRequest.cs +++ /dev/null @@ -1,204 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.TokenRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class TokenRequest : ModelBase, IFromRaw -{ - public required string Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentOutOfRangeException("endpoint", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentNullException("endpoint") - ); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Endpoint; - _ = this.AuthMethod; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public TokenRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - TokenRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static TokenRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } - - [SetsRequiredMembers] - public TokenRequest(string endpoint) - : this() - { - this.Endpoint = endpoint; - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenRequestProperties/RequestContentType.cs deleted file mode 100644 index 81e0ce2..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.TokenRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenRequestProperties/ResponseContentType.cs deleted file mode 100644 index 65a81c1..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/TokenRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.TokenRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/UserInfoRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/UserInfoRequest.cs deleted file mode 100644 index 6080030..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/UserInfoRequest.cs +++ /dev/null @@ -1,223 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.UserInfoRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class UserInfoRequest : ModelBase, IFromRaw -{ - public required string Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentOutOfRangeException("endpoint", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentNullException("endpoint") - ); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required Triggers Triggers - { - get - { - if (!this.Properties.TryGetValue("triggers", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'triggers' cannot be null", - new ArgumentOutOfRangeException("triggers", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'triggers' cannot be null", - new ArgumentNullException("triggers") - ); - } - set - { - this.Properties["triggers"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Endpoint; - this.Triggers.Validate(); - _ = this.AuthMethod; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public UserInfoRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - UserInfoRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static UserInfoRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/UserInfoRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/UserInfoRequestProperties/RequestContentType.cs deleted file mode 100644 index 62a8263..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/UserInfoRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.UserInfoRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/UserInfoRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/UserInfoRequestProperties/ResponseContentType.cs deleted file mode 100644 index 18d227e..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/UserInfoRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.UserInfoRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs deleted file mode 100644 index 45c5df3..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateParamsProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateParamsProperties.Oauth2Properties.UserInfoRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Triggers : ModelBase, IFromRaw -{ - public bool? OnTokenGrant - { - get - { - if (!this.Properties.TryGetValue("on_token_grant", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_grant"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? OnTokenRefresh - { - get - { - if (!this.Properties.TryGetValue("on_token_refresh", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_refresh"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.OnTokenGrant; - _ = this.OnTokenRefresh; - } - - public Triggers() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Triggers(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Triggers FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequest.cs index 53df53b..11e7f4e 100644 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequest.cs +++ b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequest.cs @@ -1,11 +1,11 @@ -using System; +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using ArcadeDotnet.Core; using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties; +using System = System; namespace ArcadeDotnet.Models.Admin.AuthProviders; @@ -18,21 +18,21 @@ public required string ID { get { - if (!this.Properties.TryGetValue("id", out JsonElement element)) + if (!this._rawData.TryGetValue("id", out JsonElement element)) throw new ArcadeInvalidDataException( "'id' cannot be null", - new ArgumentOutOfRangeException("id", "Missing required argument") + new System::ArgumentOutOfRangeException("id", "Missing required argument") ); return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) ?? throw new ArcadeInvalidDataException( "'id' cannot be null", - new ArgumentNullException("id") + new System::ArgumentNullException("id") ); } - set + init { - this.Properties["id"] = JsonSerializer.SerializeToElement( + this._rawData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -43,14 +43,19 @@ public string? Description { get { - if (!this.Properties.TryGetValue("description", out JsonElement element)) + if (!this._rawData.TryGetValue("description", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["description"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["description"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -64,32 +69,45 @@ public string? ExternalID { get { - if (!this.Properties.TryGetValue("external_id", out JsonElement element)) + if (!this._rawData.TryGetValue("external_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["external_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["external_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public Oauth2? Oauth2 + public AuthProviderCreateRequestOauth2? Oauth2 { get { - if (!this.Properties.TryGetValue("oauth2", out JsonElement element)) + if (!this._rawData.TryGetValue("oauth2", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); } - set + init { - this.Properties["oauth2"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["oauth2"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -100,14 +118,19 @@ public string? ProviderID { get { - if (!this.Properties.TryGetValue("provider_id", out JsonElement element)) + if (!this._rawData.TryGetValue("provider_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["provider_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["provider_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -118,14 +141,19 @@ public string? Status { get { - if (!this.Properties.TryGetValue("status", out JsonElement element)) + if (!this._rawData.TryGetValue("status", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["status"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["status"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -136,14 +164,19 @@ public string? Type { get { - if (!this.Properties.TryGetValue("type", out JsonElement element)) + if (!this._rawData.TryGetValue("type", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["type"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["type"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -163,19 +196,24 @@ public override void Validate() public AuthProviderCreateRequest() { } + public AuthProviderCreateRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - AuthProviderCreateRequest(Dictionary properties) + AuthProviderCreateRequest(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 public static AuthProviderCreateRequest FromRawUnchecked( - Dictionary properties + IReadOnlyDictionary rawData ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } [SetsRequiredMembers] @@ -185,3 +223,2384 @@ public AuthProviderCreateRequest(string id) this.ID = id; } } + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderCreateRequestOauth2 + : ModelBase, + IFromRaw +{ + public required string ClientID + { + get + { + if (!this._rawData.TryGetValue("client_id", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'client_id' cannot be null", + new System::ArgumentOutOfRangeException( + "client_id", + "Missing required argument" + ) + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'client_id' cannot be null", + new System::ArgumentNullException("client_id") + ); + } + init + { + this._rawData["client_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderCreateRequestOauth2AuthorizeRequest? AuthorizeRequest + { + get + { + if (!this._rawData.TryGetValue("authorize_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["authorize_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientSecret + { + get + { + if (!this._rawData.TryGetValue("client_secret", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderCreateRequestOauth2Pkce? Pkce + { + get + { + if (!this._rawData.TryGetValue("pkce", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["pkce"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderCreateRequestOauth2RefreshRequest? RefreshRequest + { + get + { + if (!this._rawData.TryGetValue("refresh_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["refresh_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? ScopeDelimiter + { + get + { + if (!this._rawData.TryGetValue("scope_delimiter", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["scope_delimiter"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderCreateRequestOauth2TokenIntrospectionRequest? TokenIntrospectionRequest + { + get + { + if (!this._rawData.TryGetValue("token_introspection_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["token_introspection_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderCreateRequestOauth2TokenRequest? TokenRequest + { + get + { + if (!this._rawData.TryGetValue("token_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["token_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderCreateRequestOauth2UserInfoRequest? UserInfoRequest + { + get + { + if (!this._rawData.TryGetValue("user_info_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["user_info_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.ClientID; + this.AuthorizeRequest?.Validate(); + _ = this.ClientSecret; + this.Pkce?.Validate(); + this.RefreshRequest?.Validate(); + this.ScopeDelimiter?.Validate(); + this.TokenIntrospectionRequest?.Validate(); + this.TokenRequest?.Validate(); + this.UserInfoRequest?.Validate(); + } + + public AuthProviderCreateRequestOauth2() { } + + public AuthProviderCreateRequestOauth2(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderCreateRequestOauth2(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderCreateRequestOauth2 FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } + + [SetsRequiredMembers] + public AuthProviderCreateRequestOauth2(string clientID) + : this() + { + this.ClientID = clientID; + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderCreateRequestOauth2AuthorizeRequest + : ModelBase, + IFromRaw +{ + public required string Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentOutOfRangeException("endpoint", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentNullException("endpoint") + ); + } + init + { + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderCreateRequestOauth2AuthorizeRequestRequestContentType + >? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderCreateRequestOauth2AuthorizeRequestResponseContentType + >? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Endpoint; + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public AuthProviderCreateRequestOauth2AuthorizeRequest() { } + + public AuthProviderCreateRequestOauth2AuthorizeRequest( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderCreateRequestOauth2AuthorizeRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderCreateRequestOauth2AuthorizeRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } + + [SetsRequiredMembers] + public AuthProviderCreateRequestOauth2AuthorizeRequest(string endpoint) + : this() + { + this.Endpoint = endpoint; + } +} + +[JsonConverter(typeof(AuthProviderCreateRequestOauth2AuthorizeRequestRequestContentTypeConverter))] +public enum AuthProviderCreateRequestOauth2AuthorizeRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderCreateRequestOauth2AuthorizeRequestRequestContentTypeConverter + : JsonConverter +{ + public override AuthProviderCreateRequestOauth2AuthorizeRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderCreateRequestOauth2AuthorizeRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderCreateRequestOauth2AuthorizeRequestRequestContentType.ApplicationJson, + _ => (AuthProviderCreateRequestOauth2AuthorizeRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderCreateRequestOauth2AuthorizeRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderCreateRequestOauth2AuthorizeRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderCreateRequestOauth2AuthorizeRequestRequestContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(AuthProviderCreateRequestOauth2AuthorizeRequestResponseContentTypeConverter))] +public enum AuthProviderCreateRequestOauth2AuthorizeRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderCreateRequestOauth2AuthorizeRequestResponseContentTypeConverter + : JsonConverter +{ + public override AuthProviderCreateRequestOauth2AuthorizeRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderCreateRequestOauth2AuthorizeRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderCreateRequestOauth2AuthorizeRequestResponseContentType.ApplicationJson, + _ => (AuthProviderCreateRequestOauth2AuthorizeRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderCreateRequestOauth2AuthorizeRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderCreateRequestOauth2AuthorizeRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderCreateRequestOauth2AuthorizeRequestResponseContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderCreateRequestOauth2Pkce + : ModelBase, + IFromRaw +{ + public string? CodeChallengeMethod + { + get + { + if (!this._rawData.TryGetValue("code_challenge_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["code_challenge_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Enabled + { + get + { + if (!this._rawData.TryGetValue("enabled", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["enabled"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.CodeChallengeMethod; + _ = this.Enabled; + } + + public AuthProviderCreateRequestOauth2Pkce() { } + + public AuthProviderCreateRequestOauth2Pkce(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderCreateRequestOauth2Pkce(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderCreateRequestOauth2Pkce FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderCreateRequestOauth2RefreshRequest + : ModelBase, + IFromRaw +{ + public required string Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentOutOfRangeException("endpoint", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentNullException("endpoint") + ); + } + init + { + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderCreateRequestOauth2RefreshRequestRequestContentType + >? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderCreateRequestOauth2RefreshRequestResponseContentType + >? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Endpoint; + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public AuthProviderCreateRequestOauth2RefreshRequest() { } + + public AuthProviderCreateRequestOauth2RefreshRequest( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderCreateRequestOauth2RefreshRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderCreateRequestOauth2RefreshRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } + + [SetsRequiredMembers] + public AuthProviderCreateRequestOauth2RefreshRequest(string endpoint) + : this() + { + this.Endpoint = endpoint; + } +} + +[JsonConverter(typeof(AuthProviderCreateRequestOauth2RefreshRequestRequestContentTypeConverter))] +public enum AuthProviderCreateRequestOauth2RefreshRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderCreateRequestOauth2RefreshRequestRequestContentTypeConverter + : JsonConverter +{ + public override AuthProviderCreateRequestOauth2RefreshRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderCreateRequestOauth2RefreshRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderCreateRequestOauth2RefreshRequestRequestContentType.ApplicationJson, + _ => (AuthProviderCreateRequestOauth2RefreshRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderCreateRequestOauth2RefreshRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderCreateRequestOauth2RefreshRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderCreateRequestOauth2RefreshRequestRequestContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(AuthProviderCreateRequestOauth2RefreshRequestResponseContentTypeConverter))] +public enum AuthProviderCreateRequestOauth2RefreshRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderCreateRequestOauth2RefreshRequestResponseContentTypeConverter + : JsonConverter +{ + public override AuthProviderCreateRequestOauth2RefreshRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderCreateRequestOauth2RefreshRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderCreateRequestOauth2RefreshRequestResponseContentType.ApplicationJson, + _ => (AuthProviderCreateRequestOauth2RefreshRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderCreateRequestOauth2RefreshRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderCreateRequestOauth2RefreshRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderCreateRequestOauth2RefreshRequestResponseContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(AuthProviderCreateRequestOauth2ScopeDelimiterConverter))] +public enum AuthProviderCreateRequestOauth2ScopeDelimiter +{ + Undefined, + V1, +} + +sealed class AuthProviderCreateRequestOauth2ScopeDelimiterConverter + : JsonConverter +{ + public override AuthProviderCreateRequestOauth2ScopeDelimiter Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "," => AuthProviderCreateRequestOauth2ScopeDelimiter.Undefined, + " " => AuthProviderCreateRequestOauth2ScopeDelimiter.V1, + _ => (AuthProviderCreateRequestOauth2ScopeDelimiter)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderCreateRequestOauth2ScopeDelimiter value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderCreateRequestOauth2ScopeDelimiter.Undefined => ",", + AuthProviderCreateRequestOauth2ScopeDelimiter.V1 => " ", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderCreateRequestOauth2TokenIntrospectionRequest + : ModelBase, + IFromRaw +{ + public required string Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentOutOfRangeException("endpoint", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentNullException("endpoint") + ); + } + init + { + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required AuthProviderCreateRequestOauth2TokenIntrospectionRequestTriggers Triggers + { + get + { + if (!this._rawData.TryGetValue("triggers", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'triggers' cannot be null", + new System::ArgumentOutOfRangeException("triggers", "Missing required argument") + ); + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ) + ?? throw new ArcadeInvalidDataException( + "'triggers' cannot be null", + new System::ArgumentNullException("triggers") + ); + } + init + { + this._rawData["triggers"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderCreateRequestOauth2TokenIntrospectionRequestRequestContentType + >? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderCreateRequestOauth2TokenIntrospectionRequestResponseContentType + >? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Endpoint; + this.Triggers.Validate(); + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public AuthProviderCreateRequestOauth2TokenIntrospectionRequest() { } + + public AuthProviderCreateRequestOauth2TokenIntrospectionRequest( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderCreateRequestOauth2TokenIntrospectionRequest( + FrozenDictionary rawData + ) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderCreateRequestOauth2TokenIntrospectionRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter( + typeof(ModelConverter) +)] +public sealed record class AuthProviderCreateRequestOauth2TokenIntrospectionRequestTriggers + : ModelBase, + IFromRaw +{ + public bool? OnTokenGrant + { + get + { + if (!this._rawData.TryGetValue("on_token_grant", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_grant"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? OnTokenRefresh + { + get + { + if (!this._rawData.TryGetValue("on_token_refresh", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_refresh"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.OnTokenGrant; + _ = this.OnTokenRefresh; + } + + public AuthProviderCreateRequestOauth2TokenIntrospectionRequestTriggers() { } + + public AuthProviderCreateRequestOauth2TokenIntrospectionRequestTriggers( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderCreateRequestOauth2TokenIntrospectionRequestTriggers( + FrozenDictionary rawData + ) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderCreateRequestOauth2TokenIntrospectionRequestTriggers FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter( + typeof(AuthProviderCreateRequestOauth2TokenIntrospectionRequestRequestContentTypeConverter) +)] +public enum AuthProviderCreateRequestOauth2TokenIntrospectionRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderCreateRequestOauth2TokenIntrospectionRequestRequestContentTypeConverter + : JsonConverter +{ + public override AuthProviderCreateRequestOauth2TokenIntrospectionRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderCreateRequestOauth2TokenIntrospectionRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderCreateRequestOauth2TokenIntrospectionRequestRequestContentType.ApplicationJson, + _ => (AuthProviderCreateRequestOauth2TokenIntrospectionRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderCreateRequestOauth2TokenIntrospectionRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderCreateRequestOauth2TokenIntrospectionRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderCreateRequestOauth2TokenIntrospectionRequestRequestContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter( + typeof(AuthProviderCreateRequestOauth2TokenIntrospectionRequestResponseContentTypeConverter) +)] +public enum AuthProviderCreateRequestOauth2TokenIntrospectionRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderCreateRequestOauth2TokenIntrospectionRequestResponseContentTypeConverter + : JsonConverter +{ + public override AuthProviderCreateRequestOauth2TokenIntrospectionRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderCreateRequestOauth2TokenIntrospectionRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderCreateRequestOauth2TokenIntrospectionRequestResponseContentType.ApplicationJson, + _ => (AuthProviderCreateRequestOauth2TokenIntrospectionRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderCreateRequestOauth2TokenIntrospectionRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderCreateRequestOauth2TokenIntrospectionRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderCreateRequestOauth2TokenIntrospectionRequestResponseContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderCreateRequestOauth2TokenRequest + : ModelBase, + IFromRaw +{ + public required string Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentOutOfRangeException("endpoint", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentNullException("endpoint") + ); + } + init + { + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderCreateRequestOauth2TokenRequestRequestContentType + >? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderCreateRequestOauth2TokenRequestResponseContentType + >? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Endpoint; + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public AuthProviderCreateRequestOauth2TokenRequest() { } + + public AuthProviderCreateRequestOauth2TokenRequest( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderCreateRequestOauth2TokenRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderCreateRequestOauth2TokenRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } + + [SetsRequiredMembers] + public AuthProviderCreateRequestOauth2TokenRequest(string endpoint) + : this() + { + this.Endpoint = endpoint; + } +} + +[JsonConverter(typeof(AuthProviderCreateRequestOauth2TokenRequestRequestContentTypeConverter))] +public enum AuthProviderCreateRequestOauth2TokenRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderCreateRequestOauth2TokenRequestRequestContentTypeConverter + : JsonConverter +{ + public override AuthProviderCreateRequestOauth2TokenRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderCreateRequestOauth2TokenRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderCreateRequestOauth2TokenRequestRequestContentType.ApplicationJson, + _ => (AuthProviderCreateRequestOauth2TokenRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderCreateRequestOauth2TokenRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderCreateRequestOauth2TokenRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderCreateRequestOauth2TokenRequestRequestContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(AuthProviderCreateRequestOauth2TokenRequestResponseContentTypeConverter))] +public enum AuthProviderCreateRequestOauth2TokenRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderCreateRequestOauth2TokenRequestResponseContentTypeConverter + : JsonConverter +{ + public override AuthProviderCreateRequestOauth2TokenRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderCreateRequestOauth2TokenRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderCreateRequestOauth2TokenRequestResponseContentType.ApplicationJson, + _ => (AuthProviderCreateRequestOauth2TokenRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderCreateRequestOauth2TokenRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderCreateRequestOauth2TokenRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderCreateRequestOauth2TokenRequestResponseContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderCreateRequestOauth2UserInfoRequest + : ModelBase, + IFromRaw +{ + public required string Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentOutOfRangeException("endpoint", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'endpoint' cannot be null", + new System::ArgumentNullException("endpoint") + ); + } + init + { + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required AuthProviderCreateRequestOauth2UserInfoRequestTriggers Triggers + { + get + { + if (!this._rawData.TryGetValue("triggers", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'triggers' cannot be null", + new System::ArgumentOutOfRangeException("triggers", "Missing required argument") + ); + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ) + ?? throw new ArcadeInvalidDataException( + "'triggers' cannot be null", + new System::ArgumentNullException("triggers") + ); + } + init + { + this._rawData["triggers"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderCreateRequestOauth2UserInfoRequestRequestContentType + >? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderCreateRequestOauth2UserInfoRequestResponseContentType + >? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Endpoint; + this.Triggers.Validate(); + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public AuthProviderCreateRequestOauth2UserInfoRequest() { } + + public AuthProviderCreateRequestOauth2UserInfoRequest( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderCreateRequestOauth2UserInfoRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderCreateRequestOauth2UserInfoRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderCreateRequestOauth2UserInfoRequestTriggers + : ModelBase, + IFromRaw +{ + public bool? OnTokenGrant + { + get + { + if (!this._rawData.TryGetValue("on_token_grant", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_grant"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? OnTokenRefresh + { + get + { + if (!this._rawData.TryGetValue("on_token_refresh", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_refresh"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.OnTokenGrant; + _ = this.OnTokenRefresh; + } + + public AuthProviderCreateRequestOauth2UserInfoRequestTriggers() { } + + public AuthProviderCreateRequestOauth2UserInfoRequestTriggers( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderCreateRequestOauth2UserInfoRequestTriggers( + FrozenDictionary rawData + ) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderCreateRequestOauth2UserInfoRequestTriggers FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(AuthProviderCreateRequestOauth2UserInfoRequestRequestContentTypeConverter))] +public enum AuthProviderCreateRequestOauth2UserInfoRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderCreateRequestOauth2UserInfoRequestRequestContentTypeConverter + : JsonConverter +{ + public override AuthProviderCreateRequestOauth2UserInfoRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderCreateRequestOauth2UserInfoRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderCreateRequestOauth2UserInfoRequestRequestContentType.ApplicationJson, + _ => (AuthProviderCreateRequestOauth2UserInfoRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderCreateRequestOauth2UserInfoRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderCreateRequestOauth2UserInfoRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderCreateRequestOauth2UserInfoRequestRequestContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(AuthProviderCreateRequestOauth2UserInfoRequestResponseContentTypeConverter))] +public enum AuthProviderCreateRequestOauth2UserInfoRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderCreateRequestOauth2UserInfoRequestResponseContentTypeConverter + : JsonConverter +{ + public override AuthProviderCreateRequestOauth2UserInfoRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderCreateRequestOauth2UserInfoRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderCreateRequestOauth2UserInfoRequestResponseContentType.ApplicationJson, + _ => (AuthProviderCreateRequestOauth2UserInfoRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderCreateRequestOauth2UserInfoRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderCreateRequestOauth2UserInfoRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderCreateRequestOauth2UserInfoRequestResponseContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2.cs deleted file mode 100644 index ec9ad5e..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2.cs +++ /dev/null @@ -1,235 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Oauth2 : ModelBase, IFromRaw -{ - public required string ClientID - { - get - { - if (!this.Properties.TryGetValue("client_id", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'client_id' cannot be null", - new ArgumentOutOfRangeException("client_id", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'client_id' cannot be null", - new ArgumentNullException("client_id") - ); - } - set - { - this.Properties["client_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public AuthorizeRequest? AuthorizeRequest - { - get - { - if (!this.Properties.TryGetValue("authorize_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["authorize_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientSecret - { - get - { - if (!this.Properties.TryGetValue("client_secret", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Pkce? Pkce - { - get - { - if (!this.Properties.TryGetValue("pkce", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["pkce"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public RefreshRequest? RefreshRequest - { - get - { - if (!this.Properties.TryGetValue("refresh_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["refresh_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ScopeDelimiter - { - get - { - if (!this.Properties.TryGetValue("scope_delimiter", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["scope_delimiter"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public TokenIntrospectionRequest? TokenIntrospectionRequest - { - get - { - if ( - !this.Properties.TryGetValue("token_introspection_request", out JsonElement element) - ) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["token_introspection_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public TokenRequest? TokenRequest - { - get - { - if (!this.Properties.TryGetValue("token_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["token_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public UserInfoRequest? UserInfoRequest - { - get - { - if (!this.Properties.TryGetValue("user_info_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["user_info_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.ClientID; - this.AuthorizeRequest?.Validate(); - _ = this.ClientSecret; - this.Pkce?.Validate(); - this.RefreshRequest?.Validate(); - this.ScopeDelimiter?.Validate(); - this.TokenIntrospectionRequest?.Validate(); - this.TokenRequest?.Validate(); - this.UserInfoRequest?.Validate(); - } - - public Oauth2() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Oauth2(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Oauth2 FromRawUnchecked(Dictionary properties) - { - return new(properties); - } - - [SetsRequiredMembers] - public Oauth2(string clientID) - : this() - { - this.ClientID = clientID; - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/AuthorizeRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/AuthorizeRequest.cs deleted file mode 100644 index 59aef30..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/AuthorizeRequest.cs +++ /dev/null @@ -1,204 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.AuthorizeRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class AuthorizeRequest : ModelBase, IFromRaw -{ - public required string Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentOutOfRangeException("endpoint", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentNullException("endpoint") - ); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Endpoint; - _ = this.AuthMethod; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public AuthorizeRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - AuthorizeRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static AuthorizeRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } - - [SetsRequiredMembers] - public AuthorizeRequest(string endpoint) - : this() - { - this.Endpoint = endpoint; - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/AuthorizeRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/AuthorizeRequestProperties/RequestContentType.cs deleted file mode 100644 index 1a4a83d..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/AuthorizeRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.AuthorizeRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/AuthorizeRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/AuthorizeRequestProperties/ResponseContentType.cs deleted file mode 100644 index 000be82..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/AuthorizeRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.AuthorizeRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/Pkce.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/Pkce.cs deleted file mode 100644 index efaf8f8..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/Pkce.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Pkce : ModelBase, IFromRaw -{ - public string? CodeChallengeMethod - { - get - { - if (!this.Properties.TryGetValue("code_challenge_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["code_challenge_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Enabled - { - get - { - if (!this.Properties.TryGetValue("enabled", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["enabled"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.CodeChallengeMethod; - _ = this.Enabled; - } - - public Pkce() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Pkce(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Pkce FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/RefreshRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/RefreshRequest.cs deleted file mode 100644 index e054b2c..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/RefreshRequest.cs +++ /dev/null @@ -1,204 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.RefreshRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class RefreshRequest : ModelBase, IFromRaw -{ - public required string Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentOutOfRangeException("endpoint", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentNullException("endpoint") - ); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Endpoint; - _ = this.AuthMethod; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public RefreshRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - RefreshRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static RefreshRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } - - [SetsRequiredMembers] - public RefreshRequest(string endpoint) - : this() - { - this.Endpoint = endpoint; - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/RefreshRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/RefreshRequestProperties/RequestContentType.cs deleted file mode 100644 index 46cf7fe..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/RefreshRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.RefreshRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/RefreshRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/RefreshRequestProperties/ResponseContentType.cs deleted file mode 100644 index f1c8865..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/RefreshRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.RefreshRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/ScopeDelimiter.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/ScopeDelimiter.cs deleted file mode 100644 index 3e004eb..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/ScopeDelimiter.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties; - -[JsonConverter(typeof(ScopeDelimiterConverter))] -public enum ScopeDelimiter -{ - Undefined, - V1, -} - -sealed class ScopeDelimiterConverter : JsonConverter -{ - public override ScopeDelimiter Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "," => ScopeDelimiter.Undefined, - " " => ScopeDelimiter.V1, - _ => (ScopeDelimiter)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ScopeDelimiter value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ScopeDelimiter.Undefined => ",", - ScopeDelimiter.V1 => " ", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenIntrospectionRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenIntrospectionRequest.cs deleted file mode 100644 index e396712..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenIntrospectionRequest.cs +++ /dev/null @@ -1,227 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.TokenIntrospectionRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class TokenIntrospectionRequest - : ModelBase, - IFromRaw -{ - public required string Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentOutOfRangeException("endpoint", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentNullException("endpoint") - ); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required Triggers Triggers - { - get - { - if (!this.Properties.TryGetValue("triggers", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'triggers' cannot be null", - new ArgumentOutOfRangeException("triggers", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'triggers' cannot be null", - new ArgumentNullException("triggers") - ); - } - set - { - this.Properties["triggers"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Endpoint; - this.Triggers.Validate(); - _ = this.AuthMethod; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public TokenIntrospectionRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - TokenIntrospectionRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static TokenIntrospectionRequest FromRawUnchecked( - Dictionary properties - ) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenIntrospectionRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenIntrospectionRequestProperties/RequestContentType.cs deleted file mode 100644 index 87f338f..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenIntrospectionRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.TokenIntrospectionRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenIntrospectionRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenIntrospectionRequestProperties/ResponseContentType.cs deleted file mode 100644 index 7441fb2..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenIntrospectionRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.TokenIntrospectionRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenIntrospectionRequestProperties/Triggers.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenIntrospectionRequestProperties/Triggers.cs deleted file mode 100644 index d3c6356..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenIntrospectionRequestProperties/Triggers.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.TokenIntrospectionRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Triggers : ModelBase, IFromRaw -{ - public bool? OnTokenGrant - { - get - { - if (!this.Properties.TryGetValue("on_token_grant", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_grant"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? OnTokenRefresh - { - get - { - if (!this.Properties.TryGetValue("on_token_refresh", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_refresh"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.OnTokenGrant; - _ = this.OnTokenRefresh; - } - - public Triggers() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Triggers(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Triggers FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenRequest.cs deleted file mode 100644 index e269b5a..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenRequest.cs +++ /dev/null @@ -1,204 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.TokenRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class TokenRequest : ModelBase, IFromRaw -{ - public required string Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentOutOfRangeException("endpoint", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentNullException("endpoint") - ); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Endpoint; - _ = this.AuthMethod; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public TokenRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - TokenRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static TokenRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } - - [SetsRequiredMembers] - public TokenRequest(string endpoint) - : this() - { - this.Endpoint = endpoint; - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenRequestProperties/RequestContentType.cs deleted file mode 100644 index 737cba7..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.TokenRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenRequestProperties/ResponseContentType.cs deleted file mode 100644 index 9507b2c..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/TokenRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.TokenRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/UserInfoRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/UserInfoRequest.cs deleted file mode 100644 index e428566..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/UserInfoRequest.cs +++ /dev/null @@ -1,223 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.UserInfoRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class UserInfoRequest : ModelBase, IFromRaw -{ - public required string Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentOutOfRangeException("endpoint", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'endpoint' cannot be null", - new ArgumentNullException("endpoint") - ); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required Triggers Triggers - { - get - { - if (!this.Properties.TryGetValue("triggers", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'triggers' cannot be null", - new ArgumentOutOfRangeException("triggers", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'triggers' cannot be null", - new ArgumentNullException("triggers") - ); - } - set - { - this.Properties["triggers"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Endpoint; - this.Triggers.Validate(); - _ = this.AuthMethod; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public UserInfoRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - UserInfoRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static UserInfoRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/UserInfoRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/UserInfoRequestProperties/RequestContentType.cs deleted file mode 100644 index fd42b1a..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/UserInfoRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.UserInfoRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/UserInfoRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/UserInfoRequestProperties/ResponseContentType.cs deleted file mode 100644 index 1f69c7e..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/UserInfoRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.UserInfoRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs deleted file mode 100644 index 4dacfea..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderCreateRequestProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderCreateRequestProperties.Oauth2Properties.UserInfoRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Triggers : ModelBase, IFromRaw -{ - public bool? OnTokenGrant - { - get - { - if (!this.Properties.TryGetValue("on_token_grant", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_grant"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? OnTokenRefresh - { - get - { - if (!this.Properties.TryGetValue("on_token_refresh", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_refresh"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.OnTokenGrant; - _ = this.OnTokenRefresh; - } - - public Triggers() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Triggers(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Triggers FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderDeleteParams.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderDeleteParams.cs index aaf1481..0aba8c6 100644 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderDeleteParams.cs +++ b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderDeleteParams.cs @@ -1,5 +1,9 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; +using System.Text.Json; using ArcadeDotnet.Core; namespace ArcadeDotnet.Models.Admin.AuthProviders; @@ -9,23 +13,57 @@ namespace ArcadeDotnet.Models.Admin.AuthProviders; /// public sealed record class AuthProviderDeleteParams : ParamsBase { - public required string ID; + public string? ID { get; init; } - public override Uri Url(IArcadeClient client) + public AuthProviderDeleteParams() { } + + public AuthProviderDeleteParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderDeleteParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static AuthProviderDeleteParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { return new UriBuilder( - client.BaseUrl.ToString().TrimEnd('/') + options.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/admin/auth_providers/{0}", this.ID) ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderGetParams.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderGetParams.cs index ea04040..a6e5e6d 100644 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderGetParams.cs +++ b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderGetParams.cs @@ -1,5 +1,9 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; +using System.Text.Json; using ArcadeDotnet.Core; namespace ArcadeDotnet.Models.Admin.AuthProviders; @@ -9,23 +13,57 @@ namespace ArcadeDotnet.Models.Admin.AuthProviders; /// public sealed record class AuthProviderGetParams : ParamsBase { - public required string ID; + public string? ID { get; init; } - public override Uri Url(IArcadeClient client) + public AuthProviderGetParams() { } + + public AuthProviderGetParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderGetParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static AuthProviderGetParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { return new UriBuilder( - client.BaseUrl.ToString().TrimEnd('/') + options.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/admin/auth_providers/{0}", this.ID) ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderListParams.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderListParams.cs index f0786d4..1ebd99d 100644 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderListParams.cs +++ b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderListParams.cs @@ -1,5 +1,9 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; +using System.Text.Json; using ArcadeDotnet.Core; namespace ArcadeDotnet.Models.Admin.AuthProviders; @@ -9,18 +13,52 @@ namespace ArcadeDotnet.Models.Admin.AuthProviders; /// public sealed record class AuthProviderListParams : ParamsBase { - public override Uri Url(IArcadeClient client) + public AuthProviderListParams() { } + + public AuthProviderListParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderListParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static AuthProviderListParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/admin/auth_providers") + return new UriBuilder(options.BaseUrl.ToString().TrimEnd('/') + "/v1/admin/auth_providers") { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderListResponse.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderListResponse.cs index bb490e5..71afaff 100644 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderListResponse.cs +++ b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderListResponse.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -13,7 +14,7 @@ public List? Items { get { - if (!this.Properties.TryGetValue("items", out JsonElement element)) + if (!this._rawData.TryGetValue("items", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -21,9 +22,14 @@ public List? Items ModelBase.SerializerOptions ); } - set + init { - this.Properties["items"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["items"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -34,14 +40,19 @@ public long? Limit { get { - if (!this.Properties.TryGetValue("limit", out JsonElement element)) + if (!this._rawData.TryGetValue("limit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["limit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["limit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -52,14 +63,19 @@ public long? Offset { get { - if (!this.Properties.TryGetValue("offset", out JsonElement element)) + if (!this._rawData.TryGetValue("offset", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["offset"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["offset"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -70,14 +86,19 @@ public long? PageCount { get { - if (!this.Properties.TryGetValue("page_count", out JsonElement element)) + if (!this._rawData.TryGetValue("page_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["page_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["page_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -88,14 +109,19 @@ public long? TotalCount { get { - if (!this.Properties.TryGetValue("total_count", out JsonElement element)) + if (!this._rawData.TryGetValue("total_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["total_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["total_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -116,18 +142,23 @@ public override void Validate() public AuthProviderListResponse() { } + public AuthProviderListResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - AuthProviderListResponse(Dictionary properties) + AuthProviderListResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 public static AuthProviderListResponse FromRawUnchecked( - Dictionary properties + IReadOnlyDictionary rawData ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParams.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParams.cs index 5f81b15..b194ee3 100644 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParams.cs +++ b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParams.cs @@ -1,10 +1,13 @@ -using System; +using System.Collections.Frozen; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text; using System.Text.Json; +using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties; +using ArcadeDotnet.Exceptions; +using System = System; namespace ArcadeDotnet.Models.Admin.AuthProviders; @@ -13,22 +16,31 @@ namespace ArcadeDotnet.Models.Admin.AuthProviders; /// public sealed record class AuthProviderPatchParams : ParamsBase { - public Dictionary BodyProperties { get; set; } = []; + readonly FreezableDictionary _rawBodyData = []; + public IReadOnlyDictionary RawBodyData + { + get { return this._rawBodyData.Freeze(); } + } - public required string ID; + public string? ID { get; init; } public string? ID1 { get { - if (!this.BodyProperties.TryGetValue("id", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -39,32 +51,42 @@ public string? Description { get { - if (!this.BodyProperties.TryGetValue("description", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("description", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["description"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["description"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public Oauth2? Oauth2 + public Oauth2Model? Oauth2 { get { - if (!this.BodyProperties.TryGetValue("oauth2", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("oauth2", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["oauth2"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["oauth2"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -75,14 +97,19 @@ public string? ProviderID { get { - if (!this.BodyProperties.TryGetValue("provider_id", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("provider_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["provider_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["provider_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -93,14 +120,19 @@ public string? Status { get { - if (!this.BodyProperties.TryGetValue("status", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("status", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["status"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["status"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -111,46 +143,1871 @@ public string? Type { get { - if (!this.BodyProperties.TryGetValue("type", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("type", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["type"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["type"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public AuthProviderPatchParams() { } + + public AuthProviderPatchParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderPatchParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData, + FrozenDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } +#pragma warning restore CS8618 + + public static AuthProviderPatchParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData), + FrozenDictionary.ToFrozenDictionary(rawBodyData) + ); + } + + public override System::Uri Url(ClientOptions options) { - return new UriBuilder( - client.BaseUrl.ToString().TrimEnd('/') + return new System::UriBuilder( + options.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/admin/auth_providers/{0}", this.ID) ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } internal override StringContent? BodyContent() { - return new( - JsonSerializer.Serialize(this.BodyProperties), - Encoding.UTF8, - "application/json" - ); + return new(JsonSerializer.Serialize(this.RawBodyData), Encoding.UTF8, "application/json"); } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } } } + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Oauth2Model : ModelBase, IFromRaw +{ + public Oauth2ModelAuthorizeRequest? AuthorizeRequest + { + get + { + if (!this._rawData.TryGetValue("authorize_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["authorize_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientID + { + get + { + if (!this._rawData.TryGetValue("client_id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientSecret + { + get + { + if (!this._rawData.TryGetValue("client_secret", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Oauth2ModelPkce? Pkce + { + get + { + if (!this._rawData.TryGetValue("pkce", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["pkce"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Oauth2ModelRefreshRequest? RefreshRequest + { + get + { + if (!this._rawData.TryGetValue("refresh_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["refresh_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? ScopeDelimiter + { + get + { + if (!this._rawData.TryGetValue("scope_delimiter", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["scope_delimiter"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Oauth2ModelTokenRequest? TokenRequest + { + get + { + if (!this._rawData.TryGetValue("token_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["token_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Oauth2ModelUserInfoRequest? UserInfoRequest + { + get + { + if (!this._rawData.TryGetValue("user_info_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["user_info_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + this.AuthorizeRequest?.Validate(); + _ = this.ClientID; + _ = this.ClientSecret; + this.Pkce?.Validate(); + this.RefreshRequest?.Validate(); + this.ScopeDelimiter?.Validate(); + this.TokenRequest?.Validate(); + this.UserInfoRequest?.Validate(); + } + + public Oauth2Model() { } + + public Oauth2Model(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Oauth2Model(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Oauth2Model FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Oauth2ModelAuthorizeRequest + : ModelBase, + IFromRaw +{ + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Endpoint; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public Oauth2ModelAuthorizeRequest() { } + + public Oauth2ModelAuthorizeRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Oauth2ModelAuthorizeRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Oauth2ModelAuthorizeRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(Oauth2ModelAuthorizeRequestRequestContentTypeConverter))] +public enum Oauth2ModelAuthorizeRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class Oauth2ModelAuthorizeRequestRequestContentTypeConverter + : JsonConverter +{ + public override Oauth2ModelAuthorizeRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + Oauth2ModelAuthorizeRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => Oauth2ModelAuthorizeRequestRequestContentType.ApplicationJson, + _ => (Oauth2ModelAuthorizeRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + Oauth2ModelAuthorizeRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + Oauth2ModelAuthorizeRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + Oauth2ModelAuthorizeRequestRequestContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(Oauth2ModelAuthorizeRequestResponseContentTypeConverter))] +public enum Oauth2ModelAuthorizeRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class Oauth2ModelAuthorizeRequestResponseContentTypeConverter + : JsonConverter +{ + public override Oauth2ModelAuthorizeRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + Oauth2ModelAuthorizeRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => Oauth2ModelAuthorizeRequestResponseContentType.ApplicationJson, + _ => (Oauth2ModelAuthorizeRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + Oauth2ModelAuthorizeRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + Oauth2ModelAuthorizeRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + Oauth2ModelAuthorizeRequestResponseContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Oauth2ModelPkce : ModelBase, IFromRaw +{ + public string? CodeChallengeMethod + { + get + { + if (!this._rawData.TryGetValue("code_challenge_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["code_challenge_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Enabled + { + get + { + if (!this._rawData.TryGetValue("enabled", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["enabled"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.CodeChallengeMethod; + _ = this.Enabled; + } + + public Oauth2ModelPkce() { } + + public Oauth2ModelPkce(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Oauth2ModelPkce(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Oauth2ModelPkce FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Oauth2ModelRefreshRequest + : ModelBase, + IFromRaw +{ + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Endpoint; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public Oauth2ModelRefreshRequest() { } + + public Oauth2ModelRefreshRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Oauth2ModelRefreshRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Oauth2ModelRefreshRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(Oauth2ModelRefreshRequestRequestContentTypeConverter))] +public enum Oauth2ModelRefreshRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class Oauth2ModelRefreshRequestRequestContentTypeConverter + : JsonConverter +{ + public override Oauth2ModelRefreshRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + Oauth2ModelRefreshRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => Oauth2ModelRefreshRequestRequestContentType.ApplicationJson, + _ => (Oauth2ModelRefreshRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + Oauth2ModelRefreshRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + Oauth2ModelRefreshRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + Oauth2ModelRefreshRequestRequestContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(Oauth2ModelRefreshRequestResponseContentTypeConverter))] +public enum Oauth2ModelRefreshRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class Oauth2ModelRefreshRequestResponseContentTypeConverter + : JsonConverter +{ + public override Oauth2ModelRefreshRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + Oauth2ModelRefreshRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => Oauth2ModelRefreshRequestResponseContentType.ApplicationJson, + _ => (Oauth2ModelRefreshRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + Oauth2ModelRefreshRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + Oauth2ModelRefreshRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + Oauth2ModelRefreshRequestResponseContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(Oauth2ModelScopeDelimiterConverter))] +public enum Oauth2ModelScopeDelimiter +{ + Undefined, + V1, +} + +sealed class Oauth2ModelScopeDelimiterConverter : JsonConverter +{ + public override Oauth2ModelScopeDelimiter Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "," => Oauth2ModelScopeDelimiter.Undefined, + " " => Oauth2ModelScopeDelimiter.V1, + _ => (Oauth2ModelScopeDelimiter)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + Oauth2ModelScopeDelimiter value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + Oauth2ModelScopeDelimiter.Undefined => ",", + Oauth2ModelScopeDelimiter.V1 => " ", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Oauth2ModelTokenRequest : ModelBase, IFromRaw +{ + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Endpoint; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public Oauth2ModelTokenRequest() { } + + public Oauth2ModelTokenRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Oauth2ModelTokenRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Oauth2ModelTokenRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(Oauth2ModelTokenRequestRequestContentTypeConverter))] +public enum Oauth2ModelTokenRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class Oauth2ModelTokenRequestRequestContentTypeConverter + : JsonConverter +{ + public override Oauth2ModelTokenRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + Oauth2ModelTokenRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => Oauth2ModelTokenRequestRequestContentType.ApplicationJson, + _ => (Oauth2ModelTokenRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + Oauth2ModelTokenRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + Oauth2ModelTokenRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + Oauth2ModelTokenRequestRequestContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(Oauth2ModelTokenRequestResponseContentTypeConverter))] +public enum Oauth2ModelTokenRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class Oauth2ModelTokenRequestResponseContentTypeConverter + : JsonConverter +{ + public override Oauth2ModelTokenRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + Oauth2ModelTokenRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => Oauth2ModelTokenRequestResponseContentType.ApplicationJson, + _ => (Oauth2ModelTokenRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + Oauth2ModelTokenRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + Oauth2ModelTokenRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + Oauth2ModelTokenRequestResponseContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Oauth2ModelUserInfoRequest + : ModelBase, + IFromRaw +{ + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Oauth2ModelUserInfoRequestTriggers? Triggers + { + get + { + if (!this._rawData.TryGetValue("triggers", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["triggers"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Endpoint; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + this.Triggers?.Validate(); + } + + public Oauth2ModelUserInfoRequest() { } + + public Oauth2ModelUserInfoRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Oauth2ModelUserInfoRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Oauth2ModelUserInfoRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(Oauth2ModelUserInfoRequestRequestContentTypeConverter))] +public enum Oauth2ModelUserInfoRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class Oauth2ModelUserInfoRequestRequestContentTypeConverter + : JsonConverter +{ + public override Oauth2ModelUserInfoRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + Oauth2ModelUserInfoRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => Oauth2ModelUserInfoRequestRequestContentType.ApplicationJson, + _ => (Oauth2ModelUserInfoRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + Oauth2ModelUserInfoRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + Oauth2ModelUserInfoRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + Oauth2ModelUserInfoRequestRequestContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(Oauth2ModelUserInfoRequestResponseContentTypeConverter))] +public enum Oauth2ModelUserInfoRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class Oauth2ModelUserInfoRequestResponseContentTypeConverter + : JsonConverter +{ + public override Oauth2ModelUserInfoRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + Oauth2ModelUserInfoRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => Oauth2ModelUserInfoRequestResponseContentType.ApplicationJson, + _ => (Oauth2ModelUserInfoRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + Oauth2ModelUserInfoRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + Oauth2ModelUserInfoRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + Oauth2ModelUserInfoRequestResponseContentType.ApplicationJson => "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Oauth2ModelUserInfoRequestTriggers + : ModelBase, + IFromRaw +{ + public bool? OnTokenGrant + { + get + { + if (!this._rawData.TryGetValue("on_token_grant", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_grant"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? OnTokenRefresh + { + get + { + if (!this._rawData.TryGetValue("on_token_refresh", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_refresh"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.OnTokenGrant; + _ = this.OnTokenRefresh; + } + + public Oauth2ModelUserInfoRequestTriggers() { } + + public Oauth2ModelUserInfoRequestTriggers(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Oauth2ModelUserInfoRequestTriggers(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Oauth2ModelUserInfoRequestTriggers FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2.cs deleted file mode 100644 index cfa5203..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2.cs +++ /dev/null @@ -1,195 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Oauth2 : ModelBase, IFromRaw -{ - public AuthorizeRequest? AuthorizeRequest - { - get - { - if (!this.Properties.TryGetValue("authorize_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["authorize_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientID - { - get - { - if (!this.Properties.TryGetValue("client_id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientSecret - { - get - { - if (!this.Properties.TryGetValue("client_secret", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Pkce? Pkce - { - get - { - if (!this.Properties.TryGetValue("pkce", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["pkce"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public RefreshRequest? RefreshRequest - { - get - { - if (!this.Properties.TryGetValue("refresh_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["refresh_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ScopeDelimiter - { - get - { - if (!this.Properties.TryGetValue("scope_delimiter", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["scope_delimiter"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public TokenRequest? TokenRequest - { - get - { - if (!this.Properties.TryGetValue("token_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["token_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public UserInfoRequest? UserInfoRequest - { - get - { - if (!this.Properties.TryGetValue("user_info_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["user_info_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - this.AuthorizeRequest?.Validate(); - _ = this.ClientID; - _ = this.ClientSecret; - this.Pkce?.Validate(); - this.RefreshRequest?.Validate(); - this.ScopeDelimiter?.Validate(); - this.TokenRequest?.Validate(); - this.UserInfoRequest?.Validate(); - } - - public Oauth2() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Oauth2(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Oauth2 FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/AuthorizeRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/AuthorizeRequest.cs deleted file mode 100644 index 98e747a..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/AuthorizeRequest.cs +++ /dev/null @@ -1,188 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.AuthorizeRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class AuthorizeRequest : ModelBase, IFromRaw -{ - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthMethod; - _ = this.Endpoint; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public AuthorizeRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - AuthorizeRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static AuthorizeRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/AuthorizeRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/AuthorizeRequestProperties/RequestContentType.cs deleted file mode 100644 index 1f10c55..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/AuthorizeRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.AuthorizeRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/AuthorizeRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/AuthorizeRequestProperties/ResponseContentType.cs deleted file mode 100644 index 1514846..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/AuthorizeRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.AuthorizeRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/Pkce.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/Pkce.cs deleted file mode 100644 index fb49857..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/Pkce.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Pkce : ModelBase, IFromRaw -{ - public string? CodeChallengeMethod - { - get - { - if (!this.Properties.TryGetValue("code_challenge_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["code_challenge_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Enabled - { - get - { - if (!this.Properties.TryGetValue("enabled", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["enabled"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.CodeChallengeMethod; - _ = this.Enabled; - } - - public Pkce() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Pkce(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Pkce FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/RefreshRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/RefreshRequest.cs deleted file mode 100644 index c43739f..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/RefreshRequest.cs +++ /dev/null @@ -1,188 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.RefreshRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class RefreshRequest : ModelBase, IFromRaw -{ - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthMethod; - _ = this.Endpoint; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public RefreshRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - RefreshRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static RefreshRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/RefreshRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/RefreshRequestProperties/RequestContentType.cs deleted file mode 100644 index 2a0f960..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/RefreshRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.RefreshRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/RefreshRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/RefreshRequestProperties/ResponseContentType.cs deleted file mode 100644 index adadffd..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/RefreshRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.RefreshRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/ScopeDelimiter.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/ScopeDelimiter.cs deleted file mode 100644 index 52c1ec7..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/ScopeDelimiter.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties; - -[JsonConverter(typeof(ScopeDelimiterConverter))] -public enum ScopeDelimiter -{ - Undefined, - V1, -} - -sealed class ScopeDelimiterConverter : JsonConverter -{ - public override ScopeDelimiter Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "," => ScopeDelimiter.Undefined, - " " => ScopeDelimiter.V1, - _ => (ScopeDelimiter)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ScopeDelimiter value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ScopeDelimiter.Undefined => ",", - ScopeDelimiter.V1 => " ", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/TokenRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/TokenRequest.cs deleted file mode 100644 index 4303a8c..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/TokenRequest.cs +++ /dev/null @@ -1,188 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.TokenRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class TokenRequest : ModelBase, IFromRaw -{ - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthMethod; - _ = this.Endpoint; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public TokenRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - TokenRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static TokenRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/TokenRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/TokenRequestProperties/RequestContentType.cs deleted file mode 100644 index 386b19a..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/TokenRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.TokenRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/TokenRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/TokenRequestProperties/ResponseContentType.cs deleted file mode 100644 index 9adc162..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/TokenRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.TokenRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/UserInfoRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/UserInfoRequest.cs deleted file mode 100644 index c6d87ea..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/UserInfoRequest.cs +++ /dev/null @@ -1,207 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.UserInfoRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class UserInfoRequest : ModelBase, IFromRaw -{ - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Triggers? Triggers - { - get - { - if (!this.Properties.TryGetValue("triggers", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["triggers"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthMethod; - _ = this.Endpoint; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - this.Triggers?.Validate(); - } - - public UserInfoRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - UserInfoRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static UserInfoRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/UserInfoRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/UserInfoRequestProperties/RequestContentType.cs deleted file mode 100644 index 935dd48..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/UserInfoRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.UserInfoRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/UserInfoRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/UserInfoRequestProperties/ResponseContentType.cs deleted file mode 100644 index 673ec05..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/UserInfoRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.UserInfoRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs deleted file mode 100644 index 6a03053..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderPatchParamsProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderPatchParamsProperties.Oauth2Properties.UserInfoRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Triggers : ModelBase, IFromRaw -{ - public bool? OnTokenGrant - { - get - { - if (!this.Properties.TryGetValue("on_token_grant", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_grant"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? OnTokenRefresh - { - get - { - if (!this.Properties.TryGetValue("on_token_refresh", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_refresh"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.OnTokenGrant; - _ = this.OnTokenRefresh; - } - - public Triggers() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Triggers(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Triggers FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponse.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponse.cs index 13de3d7..987343e 100644 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponse.cs +++ b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponse.cs @@ -1,9 +1,11 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties; +using ArcadeDotnet.Exceptions; +using System = System; namespace ArcadeDotnet.Models.Admin.AuthProviders; @@ -14,14 +16,19 @@ public string? ID { get { - if (!this.Properties.TryGetValue("id", out JsonElement element)) + if (!this._rawData.TryGetValue("id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -32,14 +39,19 @@ public Binding? Binding { get { - if (!this.Properties.TryGetValue("binding", out JsonElement element)) + if (!this._rawData.TryGetValue("binding", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["binding"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["binding"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -50,14 +62,19 @@ public string? CreatedAt { get { - if (!this.Properties.TryGetValue("created_at", out JsonElement element)) + if (!this._rawData.TryGetValue("created_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["created_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["created_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -68,32 +85,45 @@ public string? Description { get { - if (!this.Properties.TryGetValue("description", out JsonElement element)) + if (!this._rawData.TryGetValue("description", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["description"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["description"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public Oauth2? Oauth2 + public AuthProviderResponseOauth2? Oauth2 { get { - if (!this.Properties.TryGetValue("oauth2", out JsonElement element)) + if (!this._rawData.TryGetValue("oauth2", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); } - set + init { - this.Properties["oauth2"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["oauth2"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -104,14 +134,19 @@ public string? ProviderID { get { - if (!this.Properties.TryGetValue("provider_id", out JsonElement element)) + if (!this._rawData.TryGetValue("provider_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["provider_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["provider_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -122,14 +157,19 @@ public string? Status { get { - if (!this.Properties.TryGetValue("status", out JsonElement element)) + if (!this._rawData.TryGetValue("status", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["status"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["status"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -140,14 +180,19 @@ public string? Type { get { - if (!this.Properties.TryGetValue("type", out JsonElement element)) + if (!this._rawData.TryGetValue("type", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["type"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["type"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -158,14 +203,19 @@ public string? UpdatedAt { get { - if (!this.Properties.TryGetValue("updated_at", out JsonElement element)) + if (!this._rawData.TryGetValue("updated_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["updated_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["updated_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -187,16 +237,2250 @@ public override void Validate() public AuthProviderResponse() { } + public AuthProviderResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderResponse(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderResponse FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Binding : ModelBase, IFromRaw +{ + public string? ID + { + get + { + if (!this._rawData.TryGetValue("id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? Type + { + get + { + if (!this._rawData.TryGetValue("type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.ID; + this.Type?.Validate(); + } + + public Binding() { } + + public Binding(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Binding(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Binding FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(TypeConverter))] +public enum Type +{ + Static, + Tenant, + Project, + Account, +} + +sealed class TypeConverter : JsonConverter +{ + public override global::ArcadeDotnet.Models.Admin.AuthProviders.Type Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "static" => global::ArcadeDotnet.Models.Admin.AuthProviders.Type.Static, + "tenant" => global::ArcadeDotnet.Models.Admin.AuthProviders.Type.Tenant, + "project" => global::ArcadeDotnet.Models.Admin.AuthProviders.Type.Project, + "account" => global::ArcadeDotnet.Models.Admin.AuthProviders.Type.Account, + _ => (global::ArcadeDotnet.Models.Admin.AuthProviders.Type)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + global::ArcadeDotnet.Models.Admin.AuthProviders.Type value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + global::ArcadeDotnet.Models.Admin.AuthProviders.Type.Static => "static", + global::ArcadeDotnet.Models.Admin.AuthProviders.Type.Tenant => "tenant", + global::ArcadeDotnet.Models.Admin.AuthProviders.Type.Project => "project", + global::ArcadeDotnet.Models.Admin.AuthProviders.Type.Account => "account", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderResponseOauth2 + : ModelBase, + IFromRaw +{ + public AuthProviderResponseOauth2AuthorizeRequest? AuthorizeRequest + { + get + { + if (!this._rawData.TryGetValue("authorize_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["authorize_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientID + { + get + { + if (!this._rawData.TryGetValue("client_id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ClientSecret? ClientSecret + { + get + { + if (!this._rawData.TryGetValue("client_secret", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderResponseOauth2Pkce? Pkce + { + get + { + if (!this._rawData.TryGetValue("pkce", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["pkce"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + /// + /// The redirect URI required for this provider. + /// + public string? RedirectUri + { + get + { + if (!this._rawData.TryGetValue("redirect_uri", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["redirect_uri"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderResponseOauth2RefreshRequest? RefreshRequest + { + get + { + if (!this._rawData.TryGetValue("refresh_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["refresh_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ScopeDelimiter + { + get + { + if (!this._rawData.TryGetValue("scope_delimiter", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["scope_delimiter"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderResponseOauth2TokenIntrospectionRequest? TokenIntrospectionRequest + { + get + { + if (!this._rawData.TryGetValue("token_introspection_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["token_introspection_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderResponseOauth2TokenRequest? TokenRequest + { + get + { + if (!this._rawData.TryGetValue("token_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["token_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderResponseOauth2UserInfoRequest? UserInfoRequest + { + get + { + if (!this._rawData.TryGetValue("user_info_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["user_info_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + this.AuthorizeRequest?.Validate(); + _ = this.ClientID; + this.ClientSecret?.Validate(); + this.Pkce?.Validate(); + _ = this.RedirectUri; + this.RefreshRequest?.Validate(); + _ = this.ScopeDelimiter; + this.TokenIntrospectionRequest?.Validate(); + this.TokenRequest?.Validate(); + this.UserInfoRequest?.Validate(); + } + + public AuthProviderResponseOauth2() { } + + public AuthProviderResponseOauth2(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderResponseOauth2(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderResponseOauth2 FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderResponseOauth2AuthorizeRequest + : ModelBase, + IFromRaw +{ + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ExpirationFormat + { + get + { + if (!this._rawData.TryGetValue("expiration_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["expiration_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Endpoint; + _ = this.ExpirationFormat; + _ = this.Method; + _ = this.Params; + _ = this.RequestContentType; + _ = this.ResponseContentType; + _ = this.ResponseMap; + } + + public AuthProviderResponseOauth2AuthorizeRequest() { } + + public AuthProviderResponseOauth2AuthorizeRequest( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderResponseOauth2AuthorizeRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderResponseOauth2AuthorizeRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class ClientSecret : ModelBase, IFromRaw +{ + public ApiEnum? Binding + { + get + { + if (!this._rawData.TryGetValue("binding", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["binding"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Editable + { + get + { + if (!this._rawData.TryGetValue("editable", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["editable"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Exists + { + get + { + if (!this._rawData.TryGetValue("exists", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["exists"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Hint + { + get + { + if (!this._rawData.TryGetValue("hint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["hint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Value + { + get + { + if (!this._rawData.TryGetValue("value", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["value"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + this.Binding?.Validate(); + _ = this.Editable; + _ = this.Exists; + _ = this.Hint; + _ = this.Value; + } + + public ClientSecret() { } + + public ClientSecret(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ClientSecret(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static ClientSecret FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ClientSecretBindingConverter))] +public enum ClientSecretBinding +{ + Static, + Tenant, + Project, + Account, +} + +sealed class ClientSecretBindingConverter : JsonConverter +{ + public override ClientSecretBinding Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "static" => ClientSecretBinding.Static, + "tenant" => ClientSecretBinding.Tenant, + "project" => ClientSecretBinding.Project, + "account" => ClientSecretBinding.Account, + _ => (ClientSecretBinding)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + ClientSecretBinding value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + ClientSecretBinding.Static => "static", + ClientSecretBinding.Tenant => "tenant", + ClientSecretBinding.Project => "project", + ClientSecretBinding.Account => "account", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderResponseOauth2Pkce + : ModelBase, + IFromRaw +{ + public string? CodeChallengeMethod + { + get + { + if (!this._rawData.TryGetValue("code_challenge_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["code_challenge_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Enabled + { + get + { + if (!this._rawData.TryGetValue("enabled", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["enabled"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.CodeChallengeMethod; + _ = this.Enabled; + } + + public AuthProviderResponseOauth2Pkce() { } + + public AuthProviderResponseOauth2Pkce(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderResponseOauth2Pkce(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderResponseOauth2Pkce FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderResponseOauth2RefreshRequest + : ModelBase, + IFromRaw +{ + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ExpirationFormat + { + get + { + if (!this._rawData.TryGetValue("expiration_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["expiration_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Endpoint; + _ = this.ExpirationFormat; + _ = this.Method; + _ = this.Params; + _ = this.RequestContentType; + _ = this.ResponseContentType; + _ = this.ResponseMap; + } + + public AuthProviderResponseOauth2RefreshRequest() { } + + public AuthProviderResponseOauth2RefreshRequest( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderResponseOauth2RefreshRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderResponseOauth2RefreshRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderResponseOauth2TokenIntrospectionRequest + : ModelBase, + IFromRaw +{ + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Enabled + { + get + { + if (!this._rawData.TryGetValue("enabled", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["enabled"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ExpirationFormat + { + get + { + if (!this._rawData.TryGetValue("expiration_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["expiration_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderResponseOauth2TokenIntrospectionRequestTriggers? Triggers + { + get + { + if (!this._rawData.TryGetValue("triggers", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["triggers"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Enabled; + _ = this.Endpoint; + _ = this.ExpirationFormat; + _ = this.Method; + _ = this.Params; + _ = this.RequestContentType; + _ = this.ResponseContentType; + _ = this.ResponseMap; + this.Triggers?.Validate(); + } + + public AuthProviderResponseOauth2TokenIntrospectionRequest() { } + + public AuthProviderResponseOauth2TokenIntrospectionRequest( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderResponseOauth2TokenIntrospectionRequest( + FrozenDictionary rawData + ) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderResponseOauth2TokenIntrospectionRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderResponseOauth2TokenIntrospectionRequestTriggers + : ModelBase, + IFromRaw +{ + public bool? OnTokenGrant + { + get + { + if (!this._rawData.TryGetValue("on_token_grant", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_grant"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? OnTokenRefresh + { + get + { + if (!this._rawData.TryGetValue("on_token_refresh", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_refresh"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.OnTokenGrant; + _ = this.OnTokenRefresh; + } + + public AuthProviderResponseOauth2TokenIntrospectionRequestTriggers() { } + + public AuthProviderResponseOauth2TokenIntrospectionRequestTriggers( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderResponseOauth2TokenIntrospectionRequestTriggers( + FrozenDictionary rawData + ) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderResponseOauth2TokenIntrospectionRequestTriggers FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderResponseOauth2TokenRequest + : ModelBase, + IFromRaw +{ + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ExpirationFormat + { + get + { + if (!this._rawData.TryGetValue("expiration_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["expiration_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Endpoint; + _ = this.ExpirationFormat; + _ = this.Method; + _ = this.Params; + _ = this.RequestContentType; + _ = this.ResponseContentType; + _ = this.ResponseMap; + } + + public AuthProviderResponseOauth2TokenRequest() { } + + public AuthProviderResponseOauth2TokenRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderResponseOauth2TokenRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderResponseOauth2TokenRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderResponseOauth2UserInfoRequest + : ModelBase, + IFromRaw +{ + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ExpirationFormat + { + get + { + if (!this._rawData.TryGetValue("expiration_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["expiration_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderResponseOauth2UserInfoRequestTriggers? Triggers + { + get + { + if (!this._rawData.TryGetValue("triggers", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["triggers"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Endpoint; + _ = this.ExpirationFormat; + _ = this.Method; + _ = this.Params; + _ = this.RequestContentType; + _ = this.ResponseContentType; + _ = this.ResponseMap; + this.Triggers?.Validate(); + } + + public AuthProviderResponseOauth2UserInfoRequest() { } + + public AuthProviderResponseOauth2UserInfoRequest( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderResponseOauth2UserInfoRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderResponseOauth2UserInfoRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderResponseOauth2UserInfoRequestTriggers + : ModelBase, + IFromRaw +{ + public bool? OnTokenGrant + { + get + { + if (!this._rawData.TryGetValue("on_token_grant", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_grant"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? OnTokenRefresh + { + get + { + if (!this._rawData.TryGetValue("on_token_refresh", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_refresh"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.OnTokenGrant; + _ = this.OnTokenRefresh; + } + + public AuthProviderResponseOauth2UserInfoRequestTriggers() { } + + public AuthProviderResponseOauth2UserInfoRequestTriggers( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - AuthProviderResponse(Dictionary properties) + AuthProviderResponseOauth2UserInfoRequestTriggers(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static AuthProviderResponse FromRawUnchecked(Dictionary properties) + public static AuthProviderResponseOauth2UserInfoRequestTriggers FromRawUnchecked( + IReadOnlyDictionary rawData + ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Binding.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Binding.cs deleted file mode 100644 index 81bb43c..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Binding.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.BindingProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Binding : ModelBase, IFromRaw -{ - public string? ID - { - get - { - if (!this.Properties.TryGetValue("id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? Type - { - get - { - if (!this.Properties.TryGetValue("type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.ID; - this.Type?.Validate(); - } - - public Binding() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Binding(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Binding FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/BindingProperties/Type.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/BindingProperties/Type.cs deleted file mode 100644 index ec03c5e..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/BindingProperties/Type.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; -using System = System; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.BindingProperties; - -[JsonConverter(typeof(TypeConverter))] -public enum Type -{ - Static, - Tenant, - Project, - Account, -} - -sealed class TypeConverter : JsonConverter -{ - public override Type Read( - ref Utf8JsonReader reader, - System::Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "static" => BindingProperties.Type.Static, - "tenant" => BindingProperties.Type.Tenant, - "project" => BindingProperties.Type.Project, - "account" => BindingProperties.Type.Account, - _ => (Type)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Type value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - BindingProperties.Type.Static => "static", - BindingProperties.Type.Tenant => "tenant", - BindingProperties.Type.Project => "project", - BindingProperties.Type.Account => "account", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2.cs deleted file mode 100644 index 0547a06..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2.cs +++ /dev/null @@ -1,238 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Oauth2 : ModelBase, IFromRaw -{ - public AuthorizeRequest? AuthorizeRequest - { - get - { - if (!this.Properties.TryGetValue("authorize_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["authorize_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientID - { - get - { - if (!this.Properties.TryGetValue("client_id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ClientSecret? ClientSecret - { - get - { - if (!this.Properties.TryGetValue("client_secret", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Pkce? Pkce - { - get - { - if (!this.Properties.TryGetValue("pkce", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["pkce"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - /// - /// The redirect URI required for this provider. - /// - public string? RedirectUri - { - get - { - if (!this.Properties.TryGetValue("redirect_uri", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["redirect_uri"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public RefreshRequest? RefreshRequest - { - get - { - if (!this.Properties.TryGetValue("refresh_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["refresh_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ScopeDelimiter - { - get - { - if (!this.Properties.TryGetValue("scope_delimiter", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["scope_delimiter"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public TokenIntrospectionRequest? TokenIntrospectionRequest - { - get - { - if ( - !this.Properties.TryGetValue("token_introspection_request", out JsonElement element) - ) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["token_introspection_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public TokenRequest? TokenRequest - { - get - { - if (!this.Properties.TryGetValue("token_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["token_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public UserInfoRequest? UserInfoRequest - { - get - { - if (!this.Properties.TryGetValue("user_info_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["user_info_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - this.AuthorizeRequest?.Validate(); - _ = this.ClientID; - this.ClientSecret?.Validate(); - this.Pkce?.Validate(); - _ = this.RedirectUri; - this.RefreshRequest?.Validate(); - _ = this.ScopeDelimiter; - this.TokenIntrospectionRequest?.Validate(); - this.TokenRequest?.Validate(); - this.UserInfoRequest?.Validate(); - } - - public Oauth2() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Oauth2(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Oauth2 FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/AuthorizeRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/AuthorizeRequest.cs deleted file mode 100644 index 65ee354..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/AuthorizeRequest.cs +++ /dev/null @@ -1,200 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class AuthorizeRequest : ModelBase, IFromRaw -{ - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ExpirationFormat - { - get - { - if (!this.Properties.TryGetValue("expiration_format", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["expiration_format"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthMethod; - _ = this.Endpoint; - _ = this.ExpirationFormat; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - _ = this.RequestContentType; - _ = this.ResponseContentType; - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public AuthorizeRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - AuthorizeRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static AuthorizeRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/ClientSecret.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/ClientSecret.cs deleted file mode 100644 index 34ae50f..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/ClientSecret.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ClientSecretProperties = ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties.ClientSecretProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class ClientSecret : ModelBase, IFromRaw -{ - public ApiEnum? Binding - { - get - { - if (!this.Properties.TryGetValue("binding", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["binding"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Editable - { - get - { - if (!this.Properties.TryGetValue("editable", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["editable"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Exists - { - get - { - if (!this.Properties.TryGetValue("exists", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["exists"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Hint - { - get - { - if (!this.Properties.TryGetValue("hint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["hint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Value - { - get - { - if (!this.Properties.TryGetValue("value", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["value"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - this.Binding?.Validate(); - _ = this.Editable; - _ = this.Exists; - _ = this.Hint; - _ = this.Value; - } - - public ClientSecret() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - ClientSecret(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static ClientSecret FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/ClientSecretProperties/Binding.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/ClientSecretProperties/Binding.cs deleted file mode 100644 index f1e329d..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/ClientSecretProperties/Binding.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties.ClientSecretProperties; - -[JsonConverter(typeof(BindingConverter))] -public enum Binding -{ - Static, - Tenant, - Project, - Account, -} - -sealed class BindingConverter : JsonConverter -{ - public override Binding Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "static" => Binding.Static, - "tenant" => Binding.Tenant, - "project" => Binding.Project, - "account" => Binding.Account, - _ => (Binding)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Binding value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - Binding.Static => "static", - Binding.Tenant => "tenant", - Binding.Project => "project", - Binding.Account => "account", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/Pkce.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/Pkce.cs deleted file mode 100644 index 96b32c1..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/Pkce.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Pkce : ModelBase, IFromRaw -{ - public string? CodeChallengeMethod - { - get - { - if (!this.Properties.TryGetValue("code_challenge_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["code_challenge_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Enabled - { - get - { - if (!this.Properties.TryGetValue("enabled", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["enabled"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.CodeChallengeMethod; - _ = this.Enabled; - } - - public Pkce() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Pkce(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Pkce FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/RefreshRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/RefreshRequest.cs deleted file mode 100644 index 42ed482..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/RefreshRequest.cs +++ /dev/null @@ -1,200 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class RefreshRequest : ModelBase, IFromRaw -{ - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ExpirationFormat - { - get - { - if (!this.Properties.TryGetValue("expiration_format", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["expiration_format"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthMethod; - _ = this.Endpoint; - _ = this.ExpirationFormat; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - _ = this.RequestContentType; - _ = this.ResponseContentType; - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public RefreshRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - RefreshRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static RefreshRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/TokenIntrospectionRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/TokenIntrospectionRequest.cs deleted file mode 100644 index e5a96d4..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/TokenIntrospectionRequest.cs +++ /dev/null @@ -1,243 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties.TokenIntrospectionRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class TokenIntrospectionRequest - : ModelBase, - IFromRaw -{ - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Enabled - { - get - { - if (!this.Properties.TryGetValue("enabled", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["enabled"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ExpirationFormat - { - get - { - if (!this.Properties.TryGetValue("expiration_format", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["expiration_format"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Triggers? Triggers - { - get - { - if (!this.Properties.TryGetValue("triggers", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["triggers"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthMethod; - _ = this.Enabled; - _ = this.Endpoint; - _ = this.ExpirationFormat; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - _ = this.RequestContentType; - _ = this.ResponseContentType; - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - this.Triggers?.Validate(); - } - - public TokenIntrospectionRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - TokenIntrospectionRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static TokenIntrospectionRequest FromRawUnchecked( - Dictionary properties - ) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/TokenIntrospectionRequestProperties/Triggers.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/TokenIntrospectionRequestProperties/Triggers.cs deleted file mode 100644 index e74c5b6..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/TokenIntrospectionRequestProperties/Triggers.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties.TokenIntrospectionRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Triggers : ModelBase, IFromRaw -{ - public bool? OnTokenGrant - { - get - { - if (!this.Properties.TryGetValue("on_token_grant", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_grant"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? OnTokenRefresh - { - get - { - if (!this.Properties.TryGetValue("on_token_refresh", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_refresh"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.OnTokenGrant; - _ = this.OnTokenRefresh; - } - - public Triggers() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Triggers(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Triggers FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/TokenRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/TokenRequest.cs deleted file mode 100644 index ba5801c..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/TokenRequest.cs +++ /dev/null @@ -1,200 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class TokenRequest : ModelBase, IFromRaw -{ - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ExpirationFormat - { - get - { - if (!this.Properties.TryGetValue("expiration_format", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["expiration_format"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthMethod; - _ = this.Endpoint; - _ = this.ExpirationFormat; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - _ = this.RequestContentType; - _ = this.ResponseContentType; - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public TokenRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - TokenRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static TokenRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/UserInfoRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/UserInfoRequest.cs deleted file mode 100644 index f096f87..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/UserInfoRequest.cs +++ /dev/null @@ -1,220 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties.UserInfoRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class UserInfoRequest : ModelBase, IFromRaw -{ - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ExpirationFormat - { - get - { - if (!this.Properties.TryGetValue("expiration_format", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["expiration_format"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Triggers? Triggers - { - get - { - if (!this.Properties.TryGetValue("triggers", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["triggers"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthMethod; - _ = this.Endpoint; - _ = this.ExpirationFormat; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - _ = this.RequestContentType; - _ = this.ResponseContentType; - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - this.Triggers?.Validate(); - } - - public UserInfoRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - UserInfoRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static UserInfoRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs deleted file mode 100644 index a761b59..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderResponseProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderResponseProperties.Oauth2Properties.UserInfoRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Triggers : ModelBase, IFromRaw -{ - public bool? OnTokenGrant - { - get - { - if (!this.Properties.TryGetValue("on_token_grant", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_grant"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? OnTokenRefresh - { - get - { - if (!this.Properties.TryGetValue("on_token_refresh", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_refresh"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.OnTokenGrant; - _ = this.OnTokenRefresh; - } - - public Triggers() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Triggers(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Triggers FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequest.cs index ee5a8ad..b20166d 100644 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequest.cs +++ b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequest.cs @@ -1,9 +1,11 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties; +using ArcadeDotnet.Exceptions; +using System = System; namespace ArcadeDotnet.Models.Admin.AuthProviders; @@ -16,14 +18,19 @@ public string? ID { get { - if (!this.Properties.TryGetValue("id", out JsonElement element)) + if (!this._rawData.TryGetValue("id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -34,32 +41,45 @@ public string? Description { get { - if (!this.Properties.TryGetValue("description", out JsonElement element)) + if (!this._rawData.TryGetValue("description", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["description"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["description"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public Oauth2? Oauth2 + public AuthProviderUpdateRequestOauth2? Oauth2 { get { - if (!this.Properties.TryGetValue("oauth2", out JsonElement element)) + if (!this._rawData.TryGetValue("oauth2", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); } - set + init { - this.Properties["oauth2"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["oauth2"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -70,14 +90,19 @@ public string? ProviderID { get { - if (!this.Properties.TryGetValue("provider_id", out JsonElement element)) + if (!this._rawData.TryGetValue("provider_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["provider_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["provider_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -88,14 +113,19 @@ public string? Status { get { - if (!this.Properties.TryGetValue("status", out JsonElement element)) + if (!this._rawData.TryGetValue("status", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["status"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["status"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -106,14 +136,19 @@ public string? Type { get { - if (!this.Properties.TryGetValue("type", out JsonElement element)) + if (!this._rawData.TryGetValue("type", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["type"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["type"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -132,18 +167,1869 @@ public override void Validate() public AuthProviderUpdateRequest() { } + public AuthProviderUpdateRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - AuthProviderUpdateRequest(Dictionary properties) + AuthProviderUpdateRequest(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 public static AuthProviderUpdateRequest FromRawUnchecked( - Dictionary properties + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderUpdateRequestOauth2 + : ModelBase, + IFromRaw +{ + public AuthProviderUpdateRequestOauth2AuthorizeRequest? AuthorizeRequest + { + get + { + if (!this._rawData.TryGetValue("authorize_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["authorize_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientID + { + get + { + if (!this._rawData.TryGetValue("client_id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientSecret + { + get + { + if (!this._rawData.TryGetValue("client_secret", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderUpdateRequestOauth2Pkce? Pkce + { + get + { + if (!this._rawData.TryGetValue("pkce", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["pkce"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderUpdateRequestOauth2RefreshRequest? RefreshRequest + { + get + { + if (!this._rawData.TryGetValue("refresh_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["refresh_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? ScopeDelimiter + { + get + { + if (!this._rawData.TryGetValue("scope_delimiter", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["scope_delimiter"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderUpdateRequestOauth2TokenRequest? TokenRequest + { + get + { + if (!this._rawData.TryGetValue("token_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["token_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderUpdateRequestOauth2UserInfoRequest? UserInfoRequest + { + get + { + if (!this._rawData.TryGetValue("user_info_request", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["user_info_request"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + this.AuthorizeRequest?.Validate(); + _ = this.ClientID; + _ = this.ClientSecret; + this.Pkce?.Validate(); + this.RefreshRequest?.Validate(); + this.ScopeDelimiter?.Validate(); + this.TokenRequest?.Validate(); + this.UserInfoRequest?.Validate(); + } + + public AuthProviderUpdateRequestOauth2() { } + + public AuthProviderUpdateRequestOauth2(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderUpdateRequestOauth2(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderUpdateRequestOauth2 FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderUpdateRequestOauth2AuthorizeRequest + : ModelBase, + IFromRaw +{ + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderUpdateRequestOauth2AuthorizeRequestRequestContentType + >? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderUpdateRequestOauth2AuthorizeRequestResponseContentType + >? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Endpoint; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public AuthProviderUpdateRequestOauth2AuthorizeRequest() { } + + public AuthProviderUpdateRequestOauth2AuthorizeRequest( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderUpdateRequestOauth2AuthorizeRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderUpdateRequestOauth2AuthorizeRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(AuthProviderUpdateRequestOauth2AuthorizeRequestRequestContentTypeConverter))] +public enum AuthProviderUpdateRequestOauth2AuthorizeRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderUpdateRequestOauth2AuthorizeRequestRequestContentTypeConverter + : JsonConverter +{ + public override AuthProviderUpdateRequestOauth2AuthorizeRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderUpdateRequestOauth2AuthorizeRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderUpdateRequestOauth2AuthorizeRequestRequestContentType.ApplicationJson, + _ => (AuthProviderUpdateRequestOauth2AuthorizeRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderUpdateRequestOauth2AuthorizeRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderUpdateRequestOauth2AuthorizeRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderUpdateRequestOauth2AuthorizeRequestRequestContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(AuthProviderUpdateRequestOauth2AuthorizeRequestResponseContentTypeConverter))] +public enum AuthProviderUpdateRequestOauth2AuthorizeRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderUpdateRequestOauth2AuthorizeRequestResponseContentTypeConverter + : JsonConverter +{ + public override AuthProviderUpdateRequestOauth2AuthorizeRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderUpdateRequestOauth2AuthorizeRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderUpdateRequestOauth2AuthorizeRequestResponseContentType.ApplicationJson, + _ => (AuthProviderUpdateRequestOauth2AuthorizeRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderUpdateRequestOauth2AuthorizeRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderUpdateRequestOauth2AuthorizeRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderUpdateRequestOauth2AuthorizeRequestResponseContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderUpdateRequestOauth2Pkce + : ModelBase, + IFromRaw +{ + public string? CodeChallengeMethod + { + get + { + if (!this._rawData.TryGetValue("code_challenge_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["code_challenge_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Enabled + { + get + { + if (!this._rawData.TryGetValue("enabled", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["enabled"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.CodeChallengeMethod; + _ = this.Enabled; + } + + public AuthProviderUpdateRequestOauth2Pkce() { } + + public AuthProviderUpdateRequestOauth2Pkce(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderUpdateRequestOauth2Pkce(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderUpdateRequestOauth2Pkce FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderUpdateRequestOauth2RefreshRequest + : ModelBase, + IFromRaw +{ + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderUpdateRequestOauth2RefreshRequestRequestContentType + >? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderUpdateRequestOauth2RefreshRequestResponseContentType + >? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Endpoint; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public AuthProviderUpdateRequestOauth2RefreshRequest() { } + + public AuthProviderUpdateRequestOauth2RefreshRequest( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderUpdateRequestOauth2RefreshRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderUpdateRequestOauth2RefreshRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(AuthProviderUpdateRequestOauth2RefreshRequestRequestContentTypeConverter))] +public enum AuthProviderUpdateRequestOauth2RefreshRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderUpdateRequestOauth2RefreshRequestRequestContentTypeConverter + : JsonConverter +{ + public override AuthProviderUpdateRequestOauth2RefreshRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderUpdateRequestOauth2RefreshRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderUpdateRequestOauth2RefreshRequestRequestContentType.ApplicationJson, + _ => (AuthProviderUpdateRequestOauth2RefreshRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderUpdateRequestOauth2RefreshRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderUpdateRequestOauth2RefreshRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderUpdateRequestOauth2RefreshRequestRequestContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(AuthProviderUpdateRequestOauth2RefreshRequestResponseContentTypeConverter))] +public enum AuthProviderUpdateRequestOauth2RefreshRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderUpdateRequestOauth2RefreshRequestResponseContentTypeConverter + : JsonConverter +{ + public override AuthProviderUpdateRequestOauth2RefreshRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderUpdateRequestOauth2RefreshRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderUpdateRequestOauth2RefreshRequestResponseContentType.ApplicationJson, + _ => (AuthProviderUpdateRequestOauth2RefreshRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderUpdateRequestOauth2RefreshRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderUpdateRequestOauth2RefreshRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderUpdateRequestOauth2RefreshRequestResponseContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(AuthProviderUpdateRequestOauth2ScopeDelimiterConverter))] +public enum AuthProviderUpdateRequestOauth2ScopeDelimiter +{ + Undefined, + V1, +} + +sealed class AuthProviderUpdateRequestOauth2ScopeDelimiterConverter + : JsonConverter +{ + public override AuthProviderUpdateRequestOauth2ScopeDelimiter Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "," => AuthProviderUpdateRequestOauth2ScopeDelimiter.Undefined, + " " => AuthProviderUpdateRequestOauth2ScopeDelimiter.V1, + _ => (AuthProviderUpdateRequestOauth2ScopeDelimiter)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderUpdateRequestOauth2ScopeDelimiter value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderUpdateRequestOauth2ScopeDelimiter.Undefined => ",", + AuthProviderUpdateRequestOauth2ScopeDelimiter.V1 => " ", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderUpdateRequestOauth2TokenRequest + : ModelBase, + IFromRaw +{ + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderUpdateRequestOauth2TokenRequestRequestContentType + >? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderUpdateRequestOauth2TokenRequestResponseContentType + >? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Endpoint; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + } + + public AuthProviderUpdateRequestOauth2TokenRequest() { } + + public AuthProviderUpdateRequestOauth2TokenRequest( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderUpdateRequestOauth2TokenRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderUpdateRequestOauth2TokenRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(AuthProviderUpdateRequestOauth2TokenRequestRequestContentTypeConverter))] +public enum AuthProviderUpdateRequestOauth2TokenRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderUpdateRequestOauth2TokenRequestRequestContentTypeConverter + : JsonConverter +{ + public override AuthProviderUpdateRequestOauth2TokenRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderUpdateRequestOauth2TokenRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderUpdateRequestOauth2TokenRequestRequestContentType.ApplicationJson, + _ => (AuthProviderUpdateRequestOauth2TokenRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderUpdateRequestOauth2TokenRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderUpdateRequestOauth2TokenRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderUpdateRequestOauth2TokenRequestRequestContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(AuthProviderUpdateRequestOauth2TokenRequestResponseContentTypeConverter))] +public enum AuthProviderUpdateRequestOauth2TokenRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderUpdateRequestOauth2TokenRequestResponseContentTypeConverter + : JsonConverter +{ + public override AuthProviderUpdateRequestOauth2TokenRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderUpdateRequestOauth2TokenRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderUpdateRequestOauth2TokenRequestResponseContentType.ApplicationJson, + _ => (AuthProviderUpdateRequestOauth2TokenRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderUpdateRequestOauth2TokenRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderUpdateRequestOauth2TokenRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderUpdateRequestOauth2TokenRequestResponseContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderUpdateRequestOauth2UserInfoRequest + : ModelBase, + IFromRaw +{ + public string? AuthHeaderValueFormat + { + get + { + if (!this._rawData.TryGetValue("auth_header_value_format", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_header_value_format"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AuthMethod + { + get + { + if (!this._rawData.TryGetValue("auth_method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["auth_method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Endpoint + { + get + { + if (!this._rawData.TryGetValue("endpoint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["endpoint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Method + { + get + { + if (!this._rawData.TryGetValue("method", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["method"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Params + { + get + { + if (!this._rawData.TryGetValue("params", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["params"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderUpdateRequestOauth2UserInfoRequestRequestContentType + >? RequestContentType + { + get + { + if (!this._rawData.TryGetValue("request_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["request_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum< + string, + AuthProviderUpdateRequestOauth2UserInfoRequestResponseContentType + >? ResponseContentType + { + get + { + if (!this._rawData.TryGetValue("response_content_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_content_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? ResponseMap + { + get + { + if (!this._rawData.TryGetValue("response_map", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["response_map"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthProviderUpdateRequestOauth2UserInfoRequestTriggers? Triggers + { + get + { + if (!this._rawData.TryGetValue("triggers", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["triggers"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthHeaderValueFormat; + _ = this.AuthMethod; + _ = this.Endpoint; + _ = this.Method; + _ = this.Params; + this.RequestContentType?.Validate(); + this.ResponseContentType?.Validate(); + _ = this.ResponseMap; + this.Triggers?.Validate(); + } + + public AuthProviderUpdateRequestOauth2UserInfoRequest() { } + + public AuthProviderUpdateRequestOauth2UserInfoRequest( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderUpdateRequestOauth2UserInfoRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderUpdateRequestOauth2UserInfoRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(AuthProviderUpdateRequestOauth2UserInfoRequestRequestContentTypeConverter))] +public enum AuthProviderUpdateRequestOauth2UserInfoRequestRequestContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderUpdateRequestOauth2UserInfoRequestRequestContentTypeConverter + : JsonConverter +{ + public override AuthProviderUpdateRequestOauth2UserInfoRequestRequestContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderUpdateRequestOauth2UserInfoRequestRequestContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderUpdateRequestOauth2UserInfoRequestRequestContentType.ApplicationJson, + _ => (AuthProviderUpdateRequestOauth2UserInfoRequestRequestContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderUpdateRequestOauth2UserInfoRequestRequestContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderUpdateRequestOauth2UserInfoRequestRequestContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderUpdateRequestOauth2UserInfoRequestRequestContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(AuthProviderUpdateRequestOauth2UserInfoRequestResponseContentTypeConverter))] +public enum AuthProviderUpdateRequestOauth2UserInfoRequestResponseContentType +{ + ApplicationXWwwFormUrlencoded, + ApplicationJson, +} + +sealed class AuthProviderUpdateRequestOauth2UserInfoRequestResponseContentTypeConverter + : JsonConverter +{ + public override AuthProviderUpdateRequestOauth2UserInfoRequestResponseContentType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "application/x-www-form-urlencoded" => + AuthProviderUpdateRequestOauth2UserInfoRequestResponseContentType.ApplicationXWwwFormUrlencoded, + "application/json" => + AuthProviderUpdateRequestOauth2UserInfoRequestResponseContentType.ApplicationJson, + _ => (AuthProviderUpdateRequestOauth2UserInfoRequestResponseContentType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + AuthProviderUpdateRequestOauth2UserInfoRequestResponseContentType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + AuthProviderUpdateRequestOauth2UserInfoRequestResponseContentType.ApplicationXWwwFormUrlencoded => + "application/x-www-form-urlencoded", + AuthProviderUpdateRequestOauth2UserInfoRequestResponseContentType.ApplicationJson => + "application/json", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthProviderUpdateRequestOauth2UserInfoRequestTriggers + : ModelBase, + IFromRaw +{ + public bool? OnTokenGrant + { + get + { + if (!this._rawData.TryGetValue("on_token_grant", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_grant"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? OnTokenRefresh + { + get + { + if (!this._rawData.TryGetValue("on_token_refresh", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["on_token_refresh"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.OnTokenGrant; + _ = this.OnTokenRefresh; + } + + public AuthProviderUpdateRequestOauth2UserInfoRequestTriggers() { } + + public AuthProviderUpdateRequestOauth2UserInfoRequestTriggers( + IReadOnlyDictionary rawData + ) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthProviderUpdateRequestOauth2UserInfoRequestTriggers( + FrozenDictionary rawData + ) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthProviderUpdateRequestOauth2UserInfoRequestTriggers FromRawUnchecked( + IReadOnlyDictionary rawData ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2.cs deleted file mode 100644 index ac9688a..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2.cs +++ /dev/null @@ -1,195 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Oauth2 : ModelBase, IFromRaw -{ - public AuthorizeRequest? AuthorizeRequest - { - get - { - if (!this.Properties.TryGetValue("authorize_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["authorize_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientID - { - get - { - if (!this.Properties.TryGetValue("client_id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientSecret - { - get - { - if (!this.Properties.TryGetValue("client_secret", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Pkce? Pkce - { - get - { - if (!this.Properties.TryGetValue("pkce", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["pkce"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public RefreshRequest? RefreshRequest - { - get - { - if (!this.Properties.TryGetValue("refresh_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["refresh_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ScopeDelimiter - { - get - { - if (!this.Properties.TryGetValue("scope_delimiter", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["scope_delimiter"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public TokenRequest? TokenRequest - { - get - { - if (!this.Properties.TryGetValue("token_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["token_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public UserInfoRequest? UserInfoRequest - { - get - { - if (!this.Properties.TryGetValue("user_info_request", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["user_info_request"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - this.AuthorizeRequest?.Validate(); - _ = this.ClientID; - _ = this.ClientSecret; - this.Pkce?.Validate(); - this.RefreshRequest?.Validate(); - this.ScopeDelimiter?.Validate(); - this.TokenRequest?.Validate(); - this.UserInfoRequest?.Validate(); - } - - public Oauth2() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Oauth2(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Oauth2 FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/AuthorizeRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/AuthorizeRequest.cs deleted file mode 100644 index cacaec2..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/AuthorizeRequest.cs +++ /dev/null @@ -1,188 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.AuthorizeRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class AuthorizeRequest : ModelBase, IFromRaw -{ - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthMethod; - _ = this.Endpoint; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public AuthorizeRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - AuthorizeRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static AuthorizeRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/AuthorizeRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/AuthorizeRequestProperties/RequestContentType.cs deleted file mode 100644 index bb8e345..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/AuthorizeRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.AuthorizeRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/AuthorizeRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/AuthorizeRequestProperties/ResponseContentType.cs deleted file mode 100644 index 939a67d..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/AuthorizeRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.AuthorizeRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/Pkce.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/Pkce.cs deleted file mode 100644 index 2364747..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/Pkce.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Pkce : ModelBase, IFromRaw -{ - public string? CodeChallengeMethod - { - get - { - if (!this.Properties.TryGetValue("code_challenge_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["code_challenge_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Enabled - { - get - { - if (!this.Properties.TryGetValue("enabled", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["enabled"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.CodeChallengeMethod; - _ = this.Enabled; - } - - public Pkce() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Pkce(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Pkce FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/RefreshRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/RefreshRequest.cs deleted file mode 100644 index db39a46..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/RefreshRequest.cs +++ /dev/null @@ -1,188 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.RefreshRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class RefreshRequest : ModelBase, IFromRaw -{ - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthMethod; - _ = this.Endpoint; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public RefreshRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - RefreshRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static RefreshRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/RefreshRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/RefreshRequestProperties/RequestContentType.cs deleted file mode 100644 index 6bc0506..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/RefreshRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.RefreshRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/RefreshRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/RefreshRequestProperties/ResponseContentType.cs deleted file mode 100644 index 25eeb83..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/RefreshRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.RefreshRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/ScopeDelimiter.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/ScopeDelimiter.cs deleted file mode 100644 index 23c7256..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/ScopeDelimiter.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties; - -[JsonConverter(typeof(ScopeDelimiterConverter))] -public enum ScopeDelimiter -{ - Undefined, - V1, -} - -sealed class ScopeDelimiterConverter : JsonConverter -{ - public override ScopeDelimiter Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "," => ScopeDelimiter.Undefined, - " " => ScopeDelimiter.V1, - _ => (ScopeDelimiter)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ScopeDelimiter value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ScopeDelimiter.Undefined => ",", - ScopeDelimiter.V1 => " ", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/TokenRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/TokenRequest.cs deleted file mode 100644 index e8c38b5..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/TokenRequest.cs +++ /dev/null @@ -1,188 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.TokenRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class TokenRequest : ModelBase, IFromRaw -{ - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthMethod; - _ = this.Endpoint; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - } - - public TokenRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - TokenRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static TokenRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/TokenRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/TokenRequestProperties/RequestContentType.cs deleted file mode 100644 index f943363..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/TokenRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.TokenRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/TokenRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/TokenRequestProperties/ResponseContentType.cs deleted file mode 100644 index cd6f997..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/TokenRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.TokenRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/UserInfoRequest.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/UserInfoRequest.cs deleted file mode 100644 index 2128166..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/UserInfoRequest.cs +++ /dev/null @@ -1,207 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.UserInfoRequestProperties; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class UserInfoRequest : ModelBase, IFromRaw -{ - public string? AuthMethod - { - get - { - if (!this.Properties.TryGetValue("auth_method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["auth_method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Endpoint - { - get - { - if (!this.Properties.TryGetValue("endpoint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["endpoint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Method - { - get - { - if (!this.Properties.TryGetValue("method", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["method"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Params - { - get - { - if (!this.Properties.TryGetValue("params", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["params"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? RequestContentType - { - get - { - if (!this.Properties.TryGetValue("request_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["request_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? ResponseContentType - { - get - { - if (!this.Properties.TryGetValue("response_content_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_content_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? ResponseMap - { - get - { - if (!this.Properties.TryGetValue("response_map", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["response_map"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Triggers? Triggers - { - get - { - if (!this.Properties.TryGetValue("triggers", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["triggers"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthMethod; - _ = this.Endpoint; - _ = this.Method; - if (this.Params != null) - { - foreach (var item in this.Params.Values) - { - _ = item; - } - } - this.RequestContentType?.Validate(); - this.ResponseContentType?.Validate(); - if (this.ResponseMap != null) - { - foreach (var item in this.ResponseMap.Values) - { - _ = item; - } - } - this.Triggers?.Validate(); - } - - public UserInfoRequest() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - UserInfoRequest(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static UserInfoRequest FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/UserInfoRequestProperties/RequestContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/UserInfoRequestProperties/RequestContentType.cs deleted file mode 100644 index 39b67aa..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/UserInfoRequestProperties/RequestContentType.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.UserInfoRequestProperties; - -[JsonConverter(typeof(RequestContentTypeConverter))] -public enum RequestContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class RequestContentTypeConverter : JsonConverter -{ - public override RequestContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => RequestContentType.ApplicationXWwwFormUrlencoded, - "application/json" => RequestContentType.ApplicationJson, - _ => (RequestContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - RequestContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - RequestContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - RequestContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/UserInfoRequestProperties/ResponseContentType.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/UserInfoRequestProperties/ResponseContentType.cs deleted file mode 100644 index efb7940..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/UserInfoRequestProperties/ResponseContentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.UserInfoRequestProperties; - -[JsonConverter(typeof(ResponseContentTypeConverter))] -public enum ResponseContentType -{ - ApplicationXWwwFormUrlencoded, - ApplicationJson, -} - -sealed class ResponseContentTypeConverter : JsonConverter -{ - public override ResponseContentType Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "application/x-www-form-urlencoded" => - ResponseContentType.ApplicationXWwwFormUrlencoded, - "application/json" => ResponseContentType.ApplicationJson, - _ => (ResponseContentType)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - ResponseContentType value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseContentType.ApplicationXWwwFormUrlencoded => - "application/x-www-form-urlencoded", - ResponseContentType.ApplicationJson => "application/json", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs b/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs deleted file mode 100644 index 7b89364..0000000 --- a/src/ArcadeDotnet/Models/Admin/AuthProviders/AuthProviderUpdateRequestProperties/Oauth2Properties/UserInfoRequestProperties/Triggers.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.AuthProviders.AuthProviderUpdateRequestProperties.Oauth2Properties.UserInfoRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Triggers : ModelBase, IFromRaw -{ - public bool? OnTokenGrant - { - get - { - if (!this.Properties.TryGetValue("on_token_grant", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_grant"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? OnTokenRefresh - { - get - { - if (!this.Properties.TryGetValue("on_token_refresh", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["on_token_refresh"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.OnTokenGrant; - _ = this.OnTokenRefresh; - } - - public Triggers() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Triggers(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Triggers FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/Secrets/SecretDeleteParams.cs b/src/ArcadeDotnet/Models/Admin/Secrets/SecretDeleteParams.cs index abb7a36..bac2b78 100644 --- a/src/ArcadeDotnet/Models/Admin/Secrets/SecretDeleteParams.cs +++ b/src/ArcadeDotnet/Models/Admin/Secrets/SecretDeleteParams.cs @@ -1,5 +1,9 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; +using System.Text.Json; using ArcadeDotnet.Core; namespace ArcadeDotnet.Models.Admin.Secrets; @@ -9,23 +13,57 @@ namespace ArcadeDotnet.Models.Admin.Secrets; /// public sealed record class SecretDeleteParams : ParamsBase { - public required string SecretID; + public string? SecretID { get; init; } - public override Uri Url(IArcadeClient client) + public SecretDeleteParams() { } + + public SecretDeleteParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + SecretDeleteParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static SecretDeleteParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { return new UriBuilder( - client.BaseUrl.ToString().TrimEnd('/') + options.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/admin/secrets/{0}", this.SecretID) ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Admin/Secrets/SecretListParams.cs b/src/ArcadeDotnet/Models/Admin/Secrets/SecretListParams.cs index dc97363..0a7f47a 100644 --- a/src/ArcadeDotnet/Models/Admin/Secrets/SecretListParams.cs +++ b/src/ArcadeDotnet/Models/Admin/Secrets/SecretListParams.cs @@ -1,5 +1,9 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; +using System.Text.Json; using ArcadeDotnet.Core; namespace ArcadeDotnet.Models.Admin.Secrets; @@ -9,18 +13,52 @@ namespace ArcadeDotnet.Models.Admin.Secrets; /// public sealed record class SecretListParams : ParamsBase { - public override Uri Url(IArcadeClient client) + public SecretListParams() { } + + public SecretListParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + SecretListParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static SecretListParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/admin/secrets") + return new UriBuilder(options.BaseUrl.ToString().TrimEnd('/') + "/v1/admin/secrets") { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Admin/Secrets/SecretListResponse.cs b/src/ArcadeDotnet/Models/Admin/Secrets/SecretListResponse.cs index c462c10..8f4d02a 100644 --- a/src/ArcadeDotnet/Models/Admin/Secrets/SecretListResponse.cs +++ b/src/ArcadeDotnet/Models/Admin/Secrets/SecretListResponse.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -13,7 +14,7 @@ public List? Items { get { - if (!this.Properties.TryGetValue("items", out JsonElement element)) + if (!this._rawData.TryGetValue("items", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -21,9 +22,14 @@ public List? Items ModelBase.SerializerOptions ); } - set + init { - this.Properties["items"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["items"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -34,14 +40,19 @@ public long? Limit { get { - if (!this.Properties.TryGetValue("limit", out JsonElement element)) + if (!this._rawData.TryGetValue("limit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["limit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["limit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -52,14 +63,19 @@ public long? Offset { get { - if (!this.Properties.TryGetValue("offset", out JsonElement element)) + if (!this._rawData.TryGetValue("offset", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["offset"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["offset"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -70,14 +86,19 @@ public long? PageCount { get { - if (!this.Properties.TryGetValue("page_count", out JsonElement element)) + if (!this._rawData.TryGetValue("page_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["page_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["page_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -88,14 +109,19 @@ public long? TotalCount { get { - if (!this.Properties.TryGetValue("total_count", out JsonElement element)) + if (!this._rawData.TryGetValue("total_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["total_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["total_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -116,16 +142,23 @@ public override void Validate() public SecretListResponse() { } + public SecretListResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - SecretListResponse(Dictionary properties) + SecretListResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static SecretListResponse FromRawUnchecked(Dictionary properties) + public static SecretListResponse FromRawUnchecked( + IReadOnlyDictionary rawData + ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Admin/Secrets/SecretResponse.cs b/src/ArcadeDotnet/Models/Admin/Secrets/SecretResponse.cs index d287ed6..cb867b1 100644 --- a/src/ArcadeDotnet/Models/Admin/Secrets/SecretResponse.cs +++ b/src/ArcadeDotnet/Models/Admin/Secrets/SecretResponse.cs @@ -1,9 +1,11 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.Secrets.SecretResponseProperties; +using ArcadeDotnet.Exceptions; +using System = System; namespace ArcadeDotnet.Models.Admin.Secrets; @@ -14,14 +16,19 @@ public string? ID { get { - if (!this.Properties.TryGetValue("id", out JsonElement element)) + if (!this._rawData.TryGetValue("id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -32,14 +39,19 @@ public Binding? Binding { get { - if (!this.Properties.TryGetValue("binding", out JsonElement element)) + if (!this._rawData.TryGetValue("binding", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["binding"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["binding"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -50,14 +62,19 @@ public string? CreatedAt { get { - if (!this.Properties.TryGetValue("created_at", out JsonElement element)) + if (!this._rawData.TryGetValue("created_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["created_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["created_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -68,14 +85,19 @@ public string? Description { get { - if (!this.Properties.TryGetValue("description", out JsonElement element)) + if (!this._rawData.TryGetValue("description", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["description"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["description"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -86,14 +108,19 @@ public string? Hint { get { - if (!this.Properties.TryGetValue("hint", out JsonElement element)) + if (!this._rawData.TryGetValue("hint", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["hint"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["hint"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -104,14 +131,19 @@ public string? Key { get { - if (!this.Properties.TryGetValue("key", out JsonElement element)) + if (!this._rawData.TryGetValue("key", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["key"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["key"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -122,14 +154,19 @@ public string? LastAccessedAt { get { - if (!this.Properties.TryGetValue("last_accessed_at", out JsonElement element)) + if (!this._rawData.TryGetValue("last_accessed_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["last_accessed_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["last_accessed_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -140,14 +177,19 @@ public string? UpdatedAt { get { - if (!this.Properties.TryGetValue("updated_at", out JsonElement element)) + if (!this._rawData.TryGetValue("updated_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["updated_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["updated_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -168,16 +210,150 @@ public override void Validate() public SecretResponse() { } + public SecretResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - SecretResponse(Dictionary properties) + SecretResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static SecretResponse FromRawUnchecked(Dictionary properties) + public static SecretResponse FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Binding : ModelBase, IFromRaw +{ + public string? ID + { + get + { + if (!this._rawData.TryGetValue("id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? Type + { + get + { + if (!this._rawData.TryGetValue("type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.ID; + this.Type?.Validate(); + } + + public Binding() { } + + public Binding(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Binding(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Binding FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(TypeConverter))] +public enum Type +{ + Static, + Tenant, + Project, + Account, +} + +sealed class TypeConverter : JsonConverter +{ + public override global::ArcadeDotnet.Models.Admin.Secrets.Type Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "static" => global::ArcadeDotnet.Models.Admin.Secrets.Type.Static, + "tenant" => global::ArcadeDotnet.Models.Admin.Secrets.Type.Tenant, + "project" => global::ArcadeDotnet.Models.Admin.Secrets.Type.Project, + "account" => global::ArcadeDotnet.Models.Admin.Secrets.Type.Account, + _ => (global::ArcadeDotnet.Models.Admin.Secrets.Type)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + global::ArcadeDotnet.Models.Admin.Secrets.Type value, + JsonSerializerOptions options + ) { - return new(properties); + JsonSerializer.Serialize( + writer, + value switch + { + global::ArcadeDotnet.Models.Admin.Secrets.Type.Static => "static", + global::ArcadeDotnet.Models.Admin.Secrets.Type.Tenant => "tenant", + global::ArcadeDotnet.Models.Admin.Secrets.Type.Project => "project", + global::ArcadeDotnet.Models.Admin.Secrets.Type.Account => "account", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); } } diff --git a/src/ArcadeDotnet/Models/Admin/Secrets/SecretResponseProperties/Binding.cs b/src/ArcadeDotnet/Models/Admin/Secrets/SecretResponseProperties/Binding.cs deleted file mode 100644 index d4fe84e..0000000 --- a/src/ArcadeDotnet/Models/Admin/Secrets/SecretResponseProperties/Binding.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.Secrets.SecretResponseProperties.BindingProperties; - -namespace ArcadeDotnet.Models.Admin.Secrets.SecretResponseProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Binding : ModelBase, IFromRaw -{ - public string? ID - { - get - { - if (!this.Properties.TryGetValue("id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? Type - { - get - { - if (!this.Properties.TryGetValue("type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.ID; - this.Type?.Validate(); - } - - public Binding() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Binding(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Binding FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/Secrets/SecretResponseProperties/BindingProperties/Type.cs b/src/ArcadeDotnet/Models/Admin/Secrets/SecretResponseProperties/BindingProperties/Type.cs deleted file mode 100644 index c68573d..0000000 --- a/src/ArcadeDotnet/Models/Admin/Secrets/SecretResponseProperties/BindingProperties/Type.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; -using System = System; - -namespace ArcadeDotnet.Models.Admin.Secrets.SecretResponseProperties.BindingProperties; - -[JsonConverter(typeof(TypeConverter))] -public enum Type -{ - Static, - Tenant, - Project, - Account, -} - -sealed class TypeConverter : JsonConverter -{ - public override Type Read( - ref Utf8JsonReader reader, - System::Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "static" => BindingProperties.Type.Static, - "tenant" => BindingProperties.Type.Tenant, - "project" => BindingProperties.Type.Project, - "account" => BindingProperties.Type.Account, - _ => (Type)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Type value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - BindingProperties.Type.Static => "static", - BindingProperties.Type.Tenant => "tenant", - BindingProperties.Type.Project => "project", - BindingProperties.Type.Account => "account", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionDeleteParams.cs b/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionDeleteParams.cs index cd56cd9..3952322 100644 --- a/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionDeleteParams.cs +++ b/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionDeleteParams.cs @@ -1,5 +1,9 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; +using System.Text.Json; using ArcadeDotnet.Core; namespace ArcadeDotnet.Models.Admin.UserConnections; @@ -9,23 +13,57 @@ namespace ArcadeDotnet.Models.Admin.UserConnections; /// public sealed record class UserConnectionDeleteParams : ParamsBase { - public required string ID; + public string? ID { get; init; } - public override Uri Url(IArcadeClient client) + public UserConnectionDeleteParams() { } + + public UserConnectionDeleteParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + UserConnectionDeleteParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static UserConnectionDeleteParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { return new UriBuilder( - client.BaseUrl.ToString().TrimEnd('/') + options.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/admin/user_connections/{0}", this.ID) ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionListPageResponse.cs b/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionListPageResponse.cs index ac4765a..028c7d9 100644 --- a/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionListPageResponse.cs +++ b/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionListPageResponse.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -15,7 +16,7 @@ public List? Items { get { - if (!this.Properties.TryGetValue("items", out JsonElement element)) + if (!this._rawData.TryGetValue("items", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -23,9 +24,14 @@ public List? Items ModelBase.SerializerOptions ); } - set + init { - this.Properties["items"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["items"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -36,14 +42,19 @@ public long? Limit { get { - if (!this.Properties.TryGetValue("limit", out JsonElement element)) + if (!this._rawData.TryGetValue("limit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["limit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["limit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -54,14 +65,19 @@ public long? Offset { get { - if (!this.Properties.TryGetValue("offset", out JsonElement element)) + if (!this._rawData.TryGetValue("offset", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["offset"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["offset"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -72,14 +88,19 @@ public long? PageCount { get { - if (!this.Properties.TryGetValue("page_count", out JsonElement element)) + if (!this._rawData.TryGetValue("page_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["page_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["page_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -90,14 +111,19 @@ public long? TotalCount { get { - if (!this.Properties.TryGetValue("total_count", out JsonElement element)) + if (!this._rawData.TryGetValue("total_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["total_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["total_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -118,18 +144,23 @@ public override void Validate() public UserConnectionListPageResponse() { } + public UserConnectionListPageResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - UserConnectionListPageResponse(Dictionary properties) + UserConnectionListPageResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 public static UserConnectionListPageResponse FromRawUnchecked( - Dictionary properties + IReadOnlyDictionary rawData ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionListParams.cs b/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionListParams.cs index 57dde60..f69bcd6 100644 --- a/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionListParams.cs +++ b/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionListParams.cs @@ -1,8 +1,11 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text.Json; +using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.UserConnections.UserConnectionListParamsProperties; namespace ArcadeDotnet.Models.Admin.UserConnections; @@ -18,14 +21,19 @@ public long? Limit { get { - if (!this.QueryProperties.TryGetValue("limit", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("limit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["limit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["limit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -39,14 +47,19 @@ public long? Offset { get { - if (!this.QueryProperties.TryGetValue("offset", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("offset", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["offset"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["offset"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -57,14 +70,19 @@ public Provider? Provider { get { - if (!this.QueryProperties.TryGetValue("provider", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("provider", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["provider"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["provider"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -75,34 +93,185 @@ public User? User { get { - if (!this.QueryProperties.TryGetValue("user", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("user", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["user"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["user"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public UserConnectionListParams() { } + + public UserConnectionListParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + UserConnectionListParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/admin/user_connections") + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static UserConnectionListParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) + { + return new UriBuilder( + options.BaseUrl.ToString().TrimEnd('/') + "/v1/admin/user_connections" + ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } } } + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Provider : ModelBase, IFromRaw +{ + /// + /// Provider ID + /// + public string? ID + { + get + { + if (!this._rawData.TryGetValue("id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.ID; + } + + public Provider() { } + + public Provider(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Provider(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Provider FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class User : ModelBase, IFromRaw +{ + /// + /// User ID + /// + public string? ID + { + get + { + if (!this._rawData.TryGetValue("id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.ID; + } + + public User() { } + + public User(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + User(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static User FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} diff --git a/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionListParamsProperties/Provider.cs b/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionListParamsProperties/Provider.cs deleted file mode 100644 index 0b0328a..0000000 --- a/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionListParamsProperties/Provider.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.UserConnections.UserConnectionListParamsProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Provider : ModelBase, IFromRaw -{ - /// - /// Provider ID - /// - public string? ID - { - get - { - if (!this.Properties.TryGetValue("id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.ID; - } - - public Provider() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Provider(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Provider FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionListParamsProperties/User.cs b/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionListParamsProperties/User.cs deleted file mode 100644 index 6c02fee..0000000 --- a/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionListParamsProperties/User.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Admin.UserConnections.UserConnectionListParamsProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class User : ModelBase, IFromRaw -{ - /// - /// User ID - /// - public string? ID - { - get - { - if (!this.Properties.TryGetValue("id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.ID; - } - - public User() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - User(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static User FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionResponse.cs b/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionResponse.cs index 4fc7ace..5dfcabd 100644 --- a/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionResponse.cs +++ b/src/ArcadeDotnet/Models/Admin/UserConnections/UserConnectionResponse.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -13,14 +14,19 @@ public string? ID { get { - if (!this.Properties.TryGetValue("id", out JsonElement element)) + if (!this._rawData.TryGetValue("id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -31,14 +37,19 @@ public string? ConnectionID { get { - if (!this.Properties.TryGetValue("connection_id", out JsonElement element)) + if (!this._rawData.TryGetValue("connection_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["connection_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["connection_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -49,14 +60,19 @@ public string? ConnectionStatus { get { - if (!this.Properties.TryGetValue("connection_status", out JsonElement element)) + if (!this._rawData.TryGetValue("connection_status", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["connection_status"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["connection_status"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -67,14 +83,19 @@ public string? ProviderDescription { get { - if (!this.Properties.TryGetValue("provider_description", out JsonElement element)) + if (!this._rawData.TryGetValue("provider_description", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["provider_description"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["provider_description"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -85,14 +106,19 @@ public string? ProviderID { get { - if (!this.Properties.TryGetValue("provider_id", out JsonElement element)) + if (!this._rawData.TryGetValue("provider_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["provider_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["provider_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -103,14 +129,19 @@ public string? ProviderType { get { - if (!this.Properties.TryGetValue("provider_type", out JsonElement element)) + if (!this._rawData.TryGetValue("provider_type", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["provider_type"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["provider_type"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -121,14 +152,19 @@ public JsonElement? ProviderUserInfo { get { - if (!this.Properties.TryGetValue("provider_user_info", out JsonElement element)) + if (!this._rawData.TryGetValue("provider_user_info", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["provider_user_info"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["provider_user_info"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -139,14 +175,19 @@ public List? Scopes { get { - if (!this.Properties.TryGetValue("scopes", out JsonElement element)) + if (!this._rawData.TryGetValue("scopes", out JsonElement element)) return null; return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["scopes"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["scopes"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -157,14 +198,19 @@ public string? UserID { get { - if (!this.Properties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawData.TryGetValue("user_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["user_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -180,27 +226,29 @@ public override void Validate() _ = this.ProviderID; _ = this.ProviderType; _ = this.ProviderUserInfo; - foreach (var item in this.Scopes ?? []) - { - _ = item; - } + _ = this.Scopes; _ = this.UserID; } public UserConnectionResponse() { } + public UserConnectionResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - UserConnectionResponse(Dictionary properties) + UserConnectionResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 public static UserConnectionResponse FromRawUnchecked( - Dictionary properties + IReadOnlyDictionary rawData ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Auth/AuthAuthorizeParams.cs b/src/ArcadeDotnet/Models/Auth/AuthAuthorizeParams.cs index 30c533c..f25beff 100644 --- a/src/ArcadeDotnet/Models/Auth/AuthAuthorizeParams.cs +++ b/src/ArcadeDotnet/Models/Auth/AuthAuthorizeParams.cs @@ -1,11 +1,13 @@ using System; +using System.Collections.Frozen; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text; using System.Text.Json; +using System.Text.Json.Serialization; using ArcadeDotnet.Core; using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Auth.AuthAuthorizeParamsProperties; namespace ArcadeDotnet.Models.Auth; @@ -14,13 +16,17 @@ namespace ArcadeDotnet.Models.Auth; /// public sealed record class AuthAuthorizeParams : ParamsBase { - public Dictionary BodyProperties { get; set; } = []; + readonly FreezableDictionary _rawBodyData = []; + public IReadOnlyDictionary RawBodyData + { + get { return this._rawBodyData.Freeze(); } + } public required AuthRequirement AuthRequirement { get { - if (!this.BodyProperties.TryGetValue("auth_requirement", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("auth_requirement", out JsonElement element)) throw new ArcadeInvalidDataException( "'auth_requirement' cannot be null", new ArgumentOutOfRangeException("auth_requirement", "Missing required argument") @@ -32,9 +38,9 @@ public required AuthRequirement AuthRequirement new ArgumentNullException("auth_requirement") ); } - set + init { - this.BodyProperties["auth_requirement"] = JsonSerializer.SerializeToElement( + this._rawBodyData["auth_requirement"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -45,7 +51,7 @@ public required string UserID { get { - if (!this.BodyProperties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("user_id", out JsonElement element)) throw new ArcadeInvalidDataException( "'user_id' cannot be null", new ArgumentOutOfRangeException("user_id", "Missing required argument") @@ -57,9 +63,9 @@ public required string UserID new ArgumentNullException("user_id") ); } - set + init { - this.BodyProperties["user_id"] = JsonSerializer.SerializeToElement( + this._rawBodyData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -73,43 +79,266 @@ public string? NextUri { get { - if (!this.BodyProperties.TryGetValue("next_uri", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("next_uri", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["next_uri"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["next_uri"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public AuthAuthorizeParams() { } + + public AuthAuthorizeParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthAuthorizeParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData, + FrozenDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } +#pragma warning restore CS8618 + + public static AuthAuthorizeParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData), + FrozenDictionary.ToFrozenDictionary(rawBodyData) + ); + } + + public override Uri Url(ClientOptions options) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/auth/authorize") + return new UriBuilder(options.BaseUrl.ToString().TrimEnd('/') + "/v1/auth/authorize") { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } internal override StringContent? BodyContent() { - return new( - JsonSerializer.Serialize(this.BodyProperties), - Encoding.UTF8, - "application/json" - ); + return new(JsonSerializer.Serialize(this.RawBodyData), Encoding.UTF8, "application/json"); } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } } } + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthRequirement : ModelBase, IFromRaw +{ + /// + /// one of ID or ProviderID must be set + /// + public string? ID + { + get + { + if (!this._rawData.TryGetValue("id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Oauth2? Oauth2 + { + get + { + if (!this._rawData.TryGetValue("oauth2", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["oauth2"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + /// + /// one of ID or ProviderID must be set + /// + public string? ProviderID + { + get + { + if (!this._rawData.TryGetValue("provider_id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["provider_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ProviderType + { + get + { + if (!this._rawData.TryGetValue("provider_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["provider_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.ID; + this.Oauth2?.Validate(); + _ = this.ProviderID; + _ = this.ProviderType; + } + + public AuthRequirement() { } + + public AuthRequirement(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthRequirement(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthRequirement FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Oauth2 : ModelBase, IFromRaw +{ + public List? Scopes + { + get + { + if (!this._rawData.TryGetValue("scopes", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["scopes"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Scopes; + } + + public Oauth2() { } + + public Oauth2(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Oauth2(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Oauth2 FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} diff --git a/src/ArcadeDotnet/Models/Auth/AuthAuthorizeParamsProperties/AuthRequirement.cs b/src/ArcadeDotnet/Models/Auth/AuthAuthorizeParamsProperties/AuthRequirement.cs deleted file mode 100644 index 62bccc4..0000000 --- a/src/ArcadeDotnet/Models/Auth/AuthAuthorizeParamsProperties/AuthRequirement.cs +++ /dev/null @@ -1,113 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Auth.AuthAuthorizeParamsProperties.AuthRequirementProperties; - -namespace ArcadeDotnet.Models.Auth.AuthAuthorizeParamsProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class AuthRequirement : ModelBase, IFromRaw -{ - /// - /// one of ID or ProviderID must be set - /// - public string? ID - { - get - { - if (!this.Properties.TryGetValue("id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Oauth2? Oauth2 - { - get - { - if (!this.Properties.TryGetValue("oauth2", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["oauth2"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - /// - /// one of ID or ProviderID must be set - /// - public string? ProviderID - { - get - { - if (!this.Properties.TryGetValue("provider_id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["provider_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ProviderType - { - get - { - if (!this.Properties.TryGetValue("provider_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["provider_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.ID; - this.Oauth2?.Validate(); - _ = this.ProviderID; - _ = this.ProviderType; - } - - public AuthRequirement() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - AuthRequirement(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static AuthRequirement FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Auth/AuthAuthorizeParamsProperties/AuthRequirementProperties/Oauth2.cs b/src/ArcadeDotnet/Models/Auth/AuthAuthorizeParamsProperties/AuthRequirementProperties/Oauth2.cs deleted file mode 100644 index ecc000d..0000000 --- a/src/ArcadeDotnet/Models/Auth/AuthAuthorizeParamsProperties/AuthRequirementProperties/Oauth2.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Auth.AuthAuthorizeParamsProperties.AuthRequirementProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Oauth2 : ModelBase, IFromRaw -{ - public List? Scopes - { - get - { - if (!this.Properties.TryGetValue("scopes", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["scopes"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - foreach (var item in this.Scopes ?? []) - { - _ = item; - } - } - - public Oauth2() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Oauth2(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Oauth2 FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Auth/AuthConfirmUserParams.cs b/src/ArcadeDotnet/Models/Auth/AuthConfirmUserParams.cs index 88e9009..9867c8a 100644 --- a/src/ArcadeDotnet/Models/Auth/AuthConfirmUserParams.cs +++ b/src/ArcadeDotnet/Models/Auth/AuthConfirmUserParams.cs @@ -1,5 +1,7 @@ using System; +using System.Collections.Frozen; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text; using System.Text.Json; @@ -13,13 +15,17 @@ namespace ArcadeDotnet.Models.Auth; /// public sealed record class AuthConfirmUserParams : ParamsBase { - public Dictionary BodyProperties { get; set; } = []; + readonly FreezableDictionary _rawBodyData = []; + public IReadOnlyDictionary RawBodyData + { + get { return this._rawBodyData.Freeze(); } + } public required string FlowID { get { - if (!this.BodyProperties.TryGetValue("flow_id", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("flow_id", out JsonElement element)) throw new ArcadeInvalidDataException( "'flow_id' cannot be null", new ArgumentOutOfRangeException("flow_id", "Missing required argument") @@ -31,9 +37,9 @@ public required string FlowID new ArgumentNullException("flow_id") ); } - set + init { - this.BodyProperties["flow_id"] = JsonSerializer.SerializeToElement( + this._rawBodyData["flow_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -44,7 +50,7 @@ public required string UserID { get { - if (!this.BodyProperties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("user_id", out JsonElement element)) throw new ArcadeInvalidDataException( "'user_id' cannot be null", new ArgumentOutOfRangeException("user_id", "Missing required argument") @@ -56,36 +62,72 @@ public required string UserID new ArgumentNullException("user_id") ); } - set + init { - this.BodyProperties["user_id"] = JsonSerializer.SerializeToElement( + this._rawBodyData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public AuthConfirmUserParams() { } + + public AuthConfirmUserParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthConfirmUserParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData, + FrozenDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } +#pragma warning restore CS8618 + + public static AuthConfirmUserParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData), + FrozenDictionary.ToFrozenDictionary(rawBodyData) + ); + } + + public override Uri Url(ClientOptions options) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/auth/confirm_user") + return new UriBuilder(options.BaseUrl.ToString().TrimEnd('/') + "/v1/auth/confirm_user") { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } internal override StringContent? BodyContent() { - return new( - JsonSerializer.Serialize(this.BodyProperties), - Encoding.UTF8, - "application/json" - ); + return new(JsonSerializer.Serialize(this.RawBodyData), Encoding.UTF8, "application/json"); } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Auth/AuthRequest.cs b/src/ArcadeDotnet/Models/Auth/AuthRequest.cs index 3034b57..37ca261 100644 --- a/src/ArcadeDotnet/Models/Auth/AuthRequest.cs +++ b/src/ArcadeDotnet/Models/Auth/AuthRequest.cs @@ -1,36 +1,39 @@ using System; +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using ArcadeDotnet.Core; using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Auth.AuthRequestProperties; namespace ArcadeDotnet.Models.Auth; [JsonConverter(typeof(ModelConverter))] public sealed record class AuthRequest : ModelBase, IFromRaw { - public required AuthRequirement AuthRequirement + public required AuthRequestAuthRequirement AuthRequirement { get { - if (!this.Properties.TryGetValue("auth_requirement", out JsonElement element)) + if (!this._rawData.TryGetValue("auth_requirement", out JsonElement element)) throw new ArcadeInvalidDataException( "'auth_requirement' cannot be null", new ArgumentOutOfRangeException("auth_requirement", "Missing required argument") ); - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ) ?? throw new ArcadeInvalidDataException( "'auth_requirement' cannot be null", new ArgumentNullException("auth_requirement") ); } - set + init { - this.Properties["auth_requirement"] = JsonSerializer.SerializeToElement( + this._rawData["auth_requirement"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -41,7 +44,7 @@ public required string UserID { get { - if (!this.Properties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawData.TryGetValue("user_id", out JsonElement element)) throw new ArcadeInvalidDataException( "'user_id' cannot be null", new ArgumentOutOfRangeException("user_id", "Missing required argument") @@ -53,9 +56,9 @@ public required string UserID new ArgumentNullException("user_id") ); } - set + init { - this.Properties["user_id"] = JsonSerializer.SerializeToElement( + this._rawData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -69,14 +72,19 @@ public string? NextUri { get { - if (!this.Properties.TryGetValue("next_uri", out JsonElement element)) + if (!this._rawData.TryGetValue("next_uri", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["next_uri"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["next_uri"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -92,16 +100,214 @@ public override void Validate() public AuthRequest() { } + public AuthRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthRequest FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthRequestAuthRequirement + : ModelBase, + IFromRaw +{ + /// + /// one of ID or ProviderID must be set + /// + public string? ID + { + get + { + if (!this._rawData.TryGetValue("id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthRequestAuthRequirementOauth2? Oauth2 + { + get + { + if (!this._rawData.TryGetValue("oauth2", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["oauth2"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + /// + /// one of ID or ProviderID must be set + /// + public string? ProviderID + { + get + { + if (!this._rawData.TryGetValue("provider_id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["provider_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ProviderType + { + get + { + if (!this._rawData.TryGetValue("provider_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["provider_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.ID; + this.Oauth2?.Validate(); + _ = this.ProviderID; + _ = this.ProviderType; + } + + public AuthRequestAuthRequirement() { } + + public AuthRequestAuthRequirement(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthRequestAuthRequirement(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthRequestAuthRequirement FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthRequestAuthRequirementOauth2 + : ModelBase, + IFromRaw +{ + public List? Scopes + { + get + { + if (!this._rawData.TryGetValue("scopes", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["scopes"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Scopes; + } + + public AuthRequestAuthRequirementOauth2() { } + + public AuthRequestAuthRequirementOauth2(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - AuthRequest(Dictionary properties) + AuthRequestAuthRequirementOauth2(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static AuthRequest FromRawUnchecked(Dictionary properties) + public static AuthRequestAuthRequirementOauth2 FromRawUnchecked( + IReadOnlyDictionary rawData + ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Auth/AuthRequestProperties/AuthRequirement.cs b/src/ArcadeDotnet/Models/Auth/AuthRequestProperties/AuthRequirement.cs deleted file mode 100644 index 9e70015..0000000 --- a/src/ArcadeDotnet/Models/Auth/AuthRequestProperties/AuthRequirement.cs +++ /dev/null @@ -1,113 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Auth.AuthRequestProperties.AuthRequirementProperties; - -namespace ArcadeDotnet.Models.Auth.AuthRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class AuthRequirement : ModelBase, IFromRaw -{ - /// - /// one of ID or ProviderID must be set - /// - public string? ID - { - get - { - if (!this.Properties.TryGetValue("id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Oauth2? Oauth2 - { - get - { - if (!this.Properties.TryGetValue("oauth2", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["oauth2"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - /// - /// one of ID or ProviderID must be set - /// - public string? ProviderID - { - get - { - if (!this.Properties.TryGetValue("provider_id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["provider_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ProviderType - { - get - { - if (!this.Properties.TryGetValue("provider_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["provider_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.ID; - this.Oauth2?.Validate(); - _ = this.ProviderID; - _ = this.ProviderType; - } - - public AuthRequirement() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - AuthRequirement(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static AuthRequirement FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Auth/AuthRequestProperties/AuthRequirementProperties/Oauth2.cs b/src/ArcadeDotnet/Models/Auth/AuthRequestProperties/AuthRequirementProperties/Oauth2.cs deleted file mode 100644 index be83fc6..0000000 --- a/src/ArcadeDotnet/Models/Auth/AuthRequestProperties/AuthRequirementProperties/Oauth2.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Auth.AuthRequestProperties.AuthRequirementProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Oauth2 : ModelBase, IFromRaw -{ - public List? Scopes - { - get - { - if (!this.Properties.TryGetValue("scopes", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["scopes"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - foreach (var item in this.Scopes ?? []) - { - _ = item; - } - } - - public Oauth2() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Oauth2(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Oauth2 FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Auth/AuthStatusParams.cs b/src/ArcadeDotnet/Models/Auth/AuthStatusParams.cs index 3d45ac1..61182fa 100644 --- a/src/ArcadeDotnet/Models/Auth/AuthStatusParams.cs +++ b/src/ArcadeDotnet/Models/Auth/AuthStatusParams.cs @@ -1,4 +1,7 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text.Json; using ArcadeDotnet.Core; @@ -20,7 +23,7 @@ public required string ID { get { - if (!this.QueryProperties.TryGetValue("id", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("id", out JsonElement element)) throw new ArcadeInvalidDataException( "'id' cannot be null", new ArgumentOutOfRangeException("id", "Missing required argument") @@ -32,9 +35,9 @@ public required string ID new ArgumentNullException("id") ); } - set + init { - this.QueryProperties["id"] = JsonSerializer.SerializeToElement( + this._rawQueryData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -48,32 +51,71 @@ public long? Wait { get { - if (!this.QueryProperties.TryGetValue("wait", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("wait", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["wait"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["wait"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public AuthStatusParams() { } + + public AuthStatusParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthStatusParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static AuthStatusParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/auth/status") + return new UriBuilder(options.BaseUrl.ToString().TrimEnd('/') + "/v1/auth/status") { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Auth/ConfirmUserRequest.cs b/src/ArcadeDotnet/Models/Auth/ConfirmUserRequest.cs index 8a7a2bb..b3fe776 100644 --- a/src/ArcadeDotnet/Models/Auth/ConfirmUserRequest.cs +++ b/src/ArcadeDotnet/Models/Auth/ConfirmUserRequest.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -15,7 +16,7 @@ public required string FlowID { get { - if (!this.Properties.TryGetValue("flow_id", out JsonElement element)) + if (!this._rawData.TryGetValue("flow_id", out JsonElement element)) throw new ArcadeInvalidDataException( "'flow_id' cannot be null", new ArgumentOutOfRangeException("flow_id", "Missing required argument") @@ -27,9 +28,9 @@ public required string FlowID new ArgumentNullException("flow_id") ); } - set + init { - this.Properties["flow_id"] = JsonSerializer.SerializeToElement( + this._rawData["flow_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -40,7 +41,7 @@ public required string UserID { get { - if (!this.Properties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawData.TryGetValue("user_id", out JsonElement element)) throw new ArcadeInvalidDataException( "'user_id' cannot be null", new ArgumentOutOfRangeException("user_id", "Missing required argument") @@ -52,9 +53,9 @@ public required string UserID new ArgumentNullException("user_id") ); } - set + init { - this.Properties["user_id"] = JsonSerializer.SerializeToElement( + this._rawData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -69,16 +70,23 @@ public override void Validate() public ConfirmUserRequest() { } + public ConfirmUserRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - ConfirmUserRequest(Dictionary properties) + ConfirmUserRequest(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static ConfirmUserRequest FromRawUnchecked(Dictionary properties) + public static ConfirmUserRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Auth/ConfirmUserResponse.cs b/src/ArcadeDotnet/Models/Auth/ConfirmUserResponse.cs index 9252c87..9eaf248 100644 --- a/src/ArcadeDotnet/Models/Auth/ConfirmUserResponse.cs +++ b/src/ArcadeDotnet/Models/Auth/ConfirmUserResponse.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -15,7 +16,7 @@ public required string AuthID { get { - if (!this.Properties.TryGetValue("auth_id", out JsonElement element)) + if (!this._rawData.TryGetValue("auth_id", out JsonElement element)) throw new ArcadeInvalidDataException( "'auth_id' cannot be null", new ArgumentOutOfRangeException("auth_id", "Missing required argument") @@ -27,9 +28,9 @@ public required string AuthID new ArgumentNullException("auth_id") ); } - set + init { - this.Properties["auth_id"] = JsonSerializer.SerializeToElement( + this._rawData["auth_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -40,14 +41,19 @@ public string? NextUri { get { - if (!this.Properties.TryGetValue("next_uri", out JsonElement element)) + if (!this._rawData.TryGetValue("next_uri", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["next_uri"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["next_uri"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -62,17 +68,24 @@ public override void Validate() public ConfirmUserResponse() { } + public ConfirmUserResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - ConfirmUserResponse(Dictionary properties) + ConfirmUserResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static ConfirmUserResponse FromRawUnchecked(Dictionary properties) + public static ConfirmUserResponse FromRawUnchecked( + IReadOnlyDictionary rawData + ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } [SetsRequiredMembers] diff --git a/src/ArcadeDotnet/Models/AuthorizationContext.cs b/src/ArcadeDotnet/Models/AuthorizationContext.cs index f58aae5..fdf7542 100644 --- a/src/ArcadeDotnet/Models/AuthorizationContext.cs +++ b/src/ArcadeDotnet/Models/AuthorizationContext.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -13,14 +14,19 @@ public string? Token { get { - if (!this.Properties.TryGetValue("token", out JsonElement element)) + if (!this._rawData.TryGetValue("token", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["token"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["token"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -31,7 +37,7 @@ public Dictionary? UserInfo { get { - if (!this.Properties.TryGetValue("user_info", out JsonElement element)) + if (!this._rawData.TryGetValue("user_info", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -39,9 +45,14 @@ public Dictionary? UserInfo ModelBase.SerializerOptions ); } - set + init { - this.Properties["user_info"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["user_info"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -51,27 +62,28 @@ public Dictionary? UserInfo public override void Validate() { _ = this.Token; - if (this.UserInfo != null) - { - foreach (var item in this.UserInfo.Values) - { - _ = item; - } - } + _ = this.UserInfo; } public AuthorizationContext() { } + public AuthorizationContext(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - AuthorizationContext(Dictionary properties) + AuthorizationContext(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static AuthorizationContext FromRawUnchecked(Dictionary properties) + public static AuthorizationContext FromRawUnchecked( + IReadOnlyDictionary rawData + ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/AuthorizationResponse.cs b/src/ArcadeDotnet/Models/AuthorizationResponse.cs index 3483616..7f7f0c9 100644 --- a/src/ArcadeDotnet/Models/AuthorizationResponse.cs +++ b/src/ArcadeDotnet/Models/AuthorizationResponse.cs @@ -1,9 +1,11 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.AuthorizationResponseProperties; +using ArcadeDotnet.Exceptions; +using System = System; namespace ArcadeDotnet.Models; @@ -14,14 +16,19 @@ public string? ID { get { - if (!this.Properties.TryGetValue("id", out JsonElement element)) + if (!this._rawData.TryGetValue("id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -32,7 +39,7 @@ public AuthorizationContext? Context { get { - if (!this.Properties.TryGetValue("context", out JsonElement element)) + if (!this._rawData.TryGetValue("context", out JsonElement element)) return null; return JsonSerializer.Deserialize( @@ -40,9 +47,14 @@ public AuthorizationContext? Context ModelBase.SerializerOptions ); } - set + init { - this.Properties["context"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["context"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -53,14 +65,19 @@ public string? ProviderID { get { - if (!this.Properties.TryGetValue("provider_id", out JsonElement element)) + if (!this._rawData.TryGetValue("provider_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["provider_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["provider_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -71,14 +88,19 @@ public List? Scopes { get { - if (!this.Properties.TryGetValue("scopes", out JsonElement element)) + if (!this._rawData.TryGetValue("scopes", out JsonElement element)) return null; return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["scopes"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["scopes"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -89,7 +111,7 @@ public ApiEnum? Status { get { - if (!this.Properties.TryGetValue("status", out JsonElement element)) + if (!this._rawData.TryGetValue("status", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -97,9 +119,14 @@ public ApiEnum? Status ModelBase.SerializerOptions ); } - set + init { - this.Properties["status"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["status"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -110,14 +137,19 @@ public string? URL { get { - if (!this.Properties.TryGetValue("url", out JsonElement element)) + if (!this._rawData.TryGetValue("url", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["url"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["url"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -128,14 +160,19 @@ public string? UserID { get { - if (!this.Properties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawData.TryGetValue("user_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["user_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -147,10 +184,7 @@ public override void Validate() _ = this.ID; this.Context?.Validate(); _ = this.ProviderID; - foreach (var item in this.Scopes ?? []) - { - _ = item; - } + _ = this.Scopes; this.Status?.Validate(); _ = this.URL; _ = this.UserID; @@ -158,16 +192,69 @@ public override void Validate() public AuthorizationResponse() { } + public AuthorizationResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - AuthorizationResponse(Dictionary properties) + AuthorizationResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static AuthorizationResponse FromRawUnchecked(Dictionary properties) + public static AuthorizationResponse FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(StatusConverter))] +public enum Status +{ + NotStarted, + Pending, + Completed, + Failed, +} + +sealed class StatusConverter : JsonConverter +{ + public override Status Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "not_started" => Status.NotStarted, + "pending" => Status.Pending, + "completed" => Status.Completed, + "failed" => Status.Failed, + _ => (Status)(-1), + }; + } + + public override void Write(Utf8JsonWriter writer, Status value, JsonSerializerOptions options) { - return new(properties); + JsonSerializer.Serialize( + writer, + value switch + { + Status.NotStarted => "not_started", + Status.Pending => "pending", + Status.Completed => "completed", + Status.Failed => "failed", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); } } diff --git a/src/ArcadeDotnet/Models/AuthorizationResponseProperties/Status.cs b/src/ArcadeDotnet/Models/AuthorizationResponseProperties/Status.cs deleted file mode 100644 index f0410fe..0000000 --- a/src/ArcadeDotnet/Models/AuthorizationResponseProperties/Status.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.AuthorizationResponseProperties; - -[JsonConverter(typeof(StatusConverter))] -public enum Status -{ - NotStarted, - Pending, - Completed, - Failed, -} - -sealed class StatusConverter : JsonConverter -{ - public override Status Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "not_started" => Status.NotStarted, - "pending" => Status.Pending, - "completed" => Status.Completed, - "failed" => Status.Failed, - _ => (Status)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Status value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - Status.NotStarted => "not_started", - Status.Pending => "pending", - Status.Completed => "completed", - Status.Failed => "failed", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Chat/ChatMessage.cs b/src/ArcadeDotnet/Models/Chat/ChatMessage.cs index 3732979..38c4653 100644 --- a/src/ArcadeDotnet/Models/Chat/ChatMessage.cs +++ b/src/ArcadeDotnet/Models/Chat/ChatMessage.cs @@ -1,11 +1,11 @@ -using System; +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using ArcadeDotnet.Core; using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Chat.ChatMessageProperties; +using System = System; namespace ArcadeDotnet.Models.Chat; @@ -19,21 +19,21 @@ public required string Content { get { - if (!this.Properties.TryGetValue("content", out JsonElement element)) + if (!this._rawData.TryGetValue("content", out JsonElement element)) throw new ArcadeInvalidDataException( "'content' cannot be null", - new ArgumentOutOfRangeException("content", "Missing required argument") + new System::ArgumentOutOfRangeException("content", "Missing required argument") ); return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) ?? throw new ArcadeInvalidDataException( "'content' cannot be null", - new ArgumentNullException("content") + new System::ArgumentNullException("content") ); } - set + init { - this.Properties["content"] = JsonSerializer.SerializeToElement( + this._rawData["content"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -47,21 +47,21 @@ public required string Role { get { - if (!this.Properties.TryGetValue("role", out JsonElement element)) + if (!this._rawData.TryGetValue("role", out JsonElement element)) throw new ArcadeInvalidDataException( "'role' cannot be null", - new ArgumentOutOfRangeException("role", "Missing required argument") + new System::ArgumentOutOfRangeException("role", "Missing required argument") ); return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) ?? throw new ArcadeInvalidDataException( "'role' cannot be null", - new ArgumentNullException("role") + new System::ArgumentNullException("role") ); } - set + init { - this.Properties["role"] = JsonSerializer.SerializeToElement( + this._rawData["role"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -75,14 +75,19 @@ public string? Name { get { - if (!this.Properties.TryGetValue("name", out JsonElement element)) + if (!this._rawData.TryGetValue("name", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["name"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["name"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -96,14 +101,19 @@ public string? ToolCallID { get { - if (!this.Properties.TryGetValue("tool_call_id", out JsonElement element)) + if (!this._rawData.TryGetValue("tool_call_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["tool_call_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["tool_call_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -117,7 +127,7 @@ public List? ToolCalls { get { - if (!this.Properties.TryGetValue("tool_calls", out JsonElement element)) + if (!this._rawData.TryGetValue("tool_calls", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -125,9 +135,14 @@ public List? ToolCalls ModelBase.SerializerOptions ); } - set + init { - this.Properties["tool_calls"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["tool_calls"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -148,16 +163,241 @@ public override void Validate() public ChatMessage() { } + public ChatMessage(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - ChatMessage(Dictionary properties) + ChatMessage(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static ChatMessage FromRawUnchecked(Dictionary properties) + public static ChatMessage FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class ToolCall : ModelBase, IFromRaw +{ + public string? ID + { + get + { + if (!this._rawData.TryGetValue("id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Function? Function + { + get + { + if (!this._rawData.TryGetValue("function", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["function"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? Type + { + get + { + if (!this._rawData.TryGetValue("type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.ID; + this.Function?.Validate(); + this.Type?.Validate(); + } + + public ToolCall() { } + + public ToolCall(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ToolCall(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static ToolCall FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Function : ModelBase, IFromRaw +{ + public string? Arguments + { + get + { + if (!this._rawData.TryGetValue("arguments", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["arguments"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Name + { + get + { + if (!this._rawData.TryGetValue("name", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["name"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Arguments; + _ = this.Name; + } + + public Function() { } + + public Function(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Function(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Function FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(TypeConverter))] +public enum Type +{ + Function, +} + +sealed class TypeConverter : JsonConverter +{ + public override global::ArcadeDotnet.Models.Chat.Type Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "function" => global::ArcadeDotnet.Models.Chat.Type.Function, + _ => (global::ArcadeDotnet.Models.Chat.Type)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + global::ArcadeDotnet.Models.Chat.Type value, + JsonSerializerOptions options + ) { - return new(properties); + JsonSerializer.Serialize( + writer, + value switch + { + global::ArcadeDotnet.Models.Chat.Type.Function => "function", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); } } diff --git a/src/ArcadeDotnet/Models/Chat/ChatMessageProperties/ToolCall.cs b/src/ArcadeDotnet/Models/Chat/ChatMessageProperties/ToolCall.cs deleted file mode 100644 index c17ad65..0000000 --- a/src/ArcadeDotnet/Models/Chat/ChatMessageProperties/ToolCall.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Chat.ChatMessageProperties.ToolCallProperties; - -namespace ArcadeDotnet.Models.Chat.ChatMessageProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class ToolCall : ModelBase, IFromRaw -{ - public string? ID - { - get - { - if (!this.Properties.TryGetValue("id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Function? Function - { - get - { - if (!this.Properties.TryGetValue("function", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["function"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? Type - { - get - { - if (!this.Properties.TryGetValue("type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.ID; - this.Function?.Validate(); - this.Type?.Validate(); - } - - public ToolCall() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - ToolCall(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static ToolCall FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Chat/ChatMessageProperties/ToolCallProperties/Function.cs b/src/ArcadeDotnet/Models/Chat/ChatMessageProperties/ToolCallProperties/Function.cs deleted file mode 100644 index e873195..0000000 --- a/src/ArcadeDotnet/Models/Chat/ChatMessageProperties/ToolCallProperties/Function.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Chat.ChatMessageProperties.ToolCallProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Function : ModelBase, IFromRaw -{ - public string? Arguments - { - get - { - if (!this.Properties.TryGetValue("arguments", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["arguments"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Name - { - get - { - if (!this.Properties.TryGetValue("name", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["name"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Arguments; - _ = this.Name; - } - - public Function() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Function(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Function FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Chat/ChatMessageProperties/ToolCallProperties/Type.cs b/src/ArcadeDotnet/Models/Chat/ChatMessageProperties/ToolCallProperties/Type.cs deleted file mode 100644 index 5f53672..0000000 --- a/src/ArcadeDotnet/Models/Chat/ChatMessageProperties/ToolCallProperties/Type.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; -using System = System; - -namespace ArcadeDotnet.Models.Chat.ChatMessageProperties.ToolCallProperties; - -[JsonConverter(typeof(TypeConverter))] -public enum Type -{ - Function, -} - -sealed class TypeConverter : JsonConverter -{ - public override Type Read( - ref Utf8JsonReader reader, - System::Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "function" => ToolCallProperties.Type.Function, - _ => (Type)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Type value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - ToolCallProperties.Type.Function => "function", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Chat/ChatRequest.cs b/src/ArcadeDotnet/Models/Chat/ChatRequest.cs index 727e4c5..d950954 100644 --- a/src/ArcadeDotnet/Models/Chat/ChatRequest.cs +++ b/src/ArcadeDotnet/Models/Chat/ChatRequest.cs @@ -1,9 +1,11 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Chat.ChatRequestProperties; +using ArcadeDotnet.Exceptions; +using System = System; namespace ArcadeDotnet.Models.Chat; @@ -14,14 +16,19 @@ public double? FrequencyPenalty { get { - if (!this.Properties.TryGetValue("frequency_penalty", out JsonElement element)) + if (!this._rawData.TryGetValue("frequency_penalty", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["frequency_penalty"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["frequency_penalty"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -37,7 +44,7 @@ public Dictionary? LogitBias { get { - if (!this.Properties.TryGetValue("logit_bias", out JsonElement element)) + if (!this._rawData.TryGetValue("logit_bias", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -45,9 +52,14 @@ public Dictionary? LogitBias ModelBase.SerializerOptions ); } - set + init { - this.Properties["logit_bias"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["logit_bias"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -57,21 +69,25 @@ public Dictionary? LogitBias /// /// LogProbs indicates whether to return log probabilities of the output tokens /// or not. If true, returns the log probabilities of each output token returned - /// in the content of message. This option is currently not available on the - /// gpt-4-vision-preview model. + /// in the content of message. This option is currently not available on the gpt-4-vision-preview model. /// public bool? Logprobs { get { - if (!this.Properties.TryGetValue("logprobs", out JsonElement element)) + if (!this._rawData.TryGetValue("logprobs", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["logprobs"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["logprobs"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -82,14 +98,19 @@ public long? MaxTokens { get { - if (!this.Properties.TryGetValue("max_tokens", out JsonElement element)) + if (!this._rawData.TryGetValue("max_tokens", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["max_tokens"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["max_tokens"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -100,7 +121,7 @@ public List? Messages { get { - if (!this.Properties.TryGetValue("messages", out JsonElement element)) + if (!this._rawData.TryGetValue("messages", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -108,9 +129,14 @@ public List? Messages ModelBase.SerializerOptions ); } - set + init { - this.Properties["messages"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["messages"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -121,14 +147,19 @@ public string? Model { get { - if (!this.Properties.TryGetValue("model", out JsonElement element)) + if (!this._rawData.TryGetValue("model", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["model"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["model"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -139,14 +170,19 @@ public long? N { get { - if (!this.Properties.TryGetValue("n", out JsonElement element)) + if (!this._rawData.TryGetValue("n", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["n"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["n"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -160,14 +196,19 @@ public bool? ParallelToolCalls { get { - if (!this.Properties.TryGetValue("parallel_tool_calls", out JsonElement element)) + if (!this._rawData.TryGetValue("parallel_tool_calls", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["parallel_tool_calls"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["parallel_tool_calls"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -178,14 +219,19 @@ public double? PresencePenalty { get { - if (!this.Properties.TryGetValue("presence_penalty", out JsonElement element)) + if (!this._rawData.TryGetValue("presence_penalty", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["presence_penalty"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["presence_penalty"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -196,7 +242,7 @@ public ResponseFormat? ResponseFormat { get { - if (!this.Properties.TryGetValue("response_format", out JsonElement element)) + if (!this._rawData.TryGetValue("response_format", out JsonElement element)) return null; return JsonSerializer.Deserialize( @@ -204,9 +250,14 @@ public ResponseFormat? ResponseFormat ModelBase.SerializerOptions ); } - set + init { - this.Properties["response_format"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["response_format"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -217,14 +268,19 @@ public long? Seed { get { - if (!this.Properties.TryGetValue("seed", out JsonElement element)) + if (!this._rawData.TryGetValue("seed", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["seed"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["seed"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -235,14 +291,19 @@ public List? Stop { get { - if (!this.Properties.TryGetValue("stop", out JsonElement element)) + if (!this._rawData.TryGetValue("stop", out JsonElement element)) return null; return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["stop"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["stop"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -253,14 +314,19 @@ public bool? Stream { get { - if (!this.Properties.TryGetValue("stream", out JsonElement element)) + if (!this._rawData.TryGetValue("stream", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["stream"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["stream"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -274,14 +340,19 @@ public StreamOptions? StreamOptions { get { - if (!this.Properties.TryGetValue("stream_options", out JsonElement element)) + if (!this._rawData.TryGetValue("stream_options", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["stream_options"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["stream_options"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -292,14 +363,19 @@ public double? Temperature { get { - if (!this.Properties.TryGetValue("temperature", out JsonElement element)) + if (!this._rawData.TryGetValue("temperature", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["temperature"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["temperature"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -313,14 +389,19 @@ public JsonElement? ToolChoice { get { - if (!this.Properties.TryGetValue("tool_choice", out JsonElement element)) + if (!this._rawData.TryGetValue("tool_choice", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["tool_choice"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["tool_choice"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -331,14 +412,19 @@ public JsonElement? Tools { get { - if (!this.Properties.TryGetValue("tools", out JsonElement element)) + if (!this._rawData.TryGetValue("tools", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["tools"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["tools"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -354,14 +440,19 @@ public long? TopLogprobs { get { - if (!this.Properties.TryGetValue("top_logprobs", out JsonElement element)) + if (!this._rawData.TryGetValue("top_logprobs", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["top_logprobs"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["top_logprobs"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -372,14 +463,19 @@ public double? TopP { get { - if (!this.Properties.TryGetValue("top_p", out JsonElement element)) + if (!this._rawData.TryGetValue("top_p", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["top_p"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["top_p"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -390,14 +486,19 @@ public string? User { get { - if (!this.Properties.TryGetValue("user", out JsonElement element)) + if (!this._rawData.TryGetValue("user", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["user"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["user"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -407,13 +508,7 @@ public string? User public override void Validate() { _ = this.FrequencyPenalty; - if (this.LogitBias != null) - { - foreach (var item in this.LogitBias.Values) - { - _ = item; - } - } + _ = this.LogitBias; _ = this.Logprobs; _ = this.MaxTokens; foreach (var item in this.Messages ?? []) @@ -426,10 +521,7 @@ public override void Validate() _ = this.PresencePenalty; this.ResponseFormat?.Validate(); _ = this.Seed; - foreach (var item in this.Stop ?? []) - { - _ = item; - } + _ = this.Stop; _ = this.Stream; this.StreamOptions?.Validate(); _ = this.Temperature; @@ -442,16 +534,181 @@ public override void Validate() public ChatRequest() { } + public ChatRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ChatRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static ChatRequest FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class ResponseFormat : ModelBase, IFromRaw +{ + public ApiEnum? Type + { + get + { + if (!this._rawData.TryGetValue("type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + this.Type?.Validate(); + } + + public ResponseFormat() { } + + public ResponseFormat(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ResponseFormat(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static ResponseFormat FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ResponseFormatTypeConverter))] +public enum ResponseFormatType +{ + JsonObject, + Text, +} + +sealed class ResponseFormatTypeConverter : JsonConverter +{ + public override ResponseFormatType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "json_object" => ResponseFormatType.JsonObject, + "text" => ResponseFormatType.Text, + _ => (ResponseFormatType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + ResponseFormatType value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + ResponseFormatType.JsonObject => "json_object", + ResponseFormatType.Text => "text", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +/// +/// Options for streaming response. Only set this when you set stream: true. +/// +[JsonConverter(typeof(ModelConverter))] +public sealed record class StreamOptions : ModelBase, IFromRaw +{ + /// + /// If set, an additional chunk will be streamed before the data: [DONE] message. + /// The usage field on this chunk shows the token usage statistics for the entire + /// request, and the choices field will always be an empty array. All other chunks + /// will also include a usage field, but with a null value. + /// + public bool? IncludeUsage + { + get + { + if (!this._rawData.TryGetValue("include_usage", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["include_usage"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.IncludeUsage; + } + + public StreamOptions() { } + + public StreamOptions(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - ChatRequest(Dictionary properties) + StreamOptions(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static ChatRequest FromRawUnchecked(Dictionary properties) + public static StreamOptions FromRawUnchecked(IReadOnlyDictionary rawData) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Chat/ChatRequestProperties/ResponseFormat.cs b/src/ArcadeDotnet/Models/Chat/ChatRequestProperties/ResponseFormat.cs deleted file mode 100644 index dcf3556..0000000 --- a/src/ArcadeDotnet/Models/Chat/ChatRequestProperties/ResponseFormat.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Chat.ChatRequestProperties.ResponseFormatProperties; - -namespace ArcadeDotnet.Models.Chat.ChatRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class ResponseFormat : ModelBase, IFromRaw -{ - public ApiEnum? Type - { - get - { - if (!this.Properties.TryGetValue("type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - this.Type?.Validate(); - } - - public ResponseFormat() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - ResponseFormat(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static ResponseFormat FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Chat/ChatRequestProperties/ResponseFormatProperties/Type.cs b/src/ArcadeDotnet/Models/Chat/ChatRequestProperties/ResponseFormatProperties/Type.cs deleted file mode 100644 index 760fd34..0000000 --- a/src/ArcadeDotnet/Models/Chat/ChatRequestProperties/ResponseFormatProperties/Type.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; -using System = System; - -namespace ArcadeDotnet.Models.Chat.ChatRequestProperties.ResponseFormatProperties; - -[JsonConverter(typeof(TypeConverter))] -public enum Type -{ - JsonObject, - Text, -} - -sealed class TypeConverter : JsonConverter -{ - public override Type Read( - ref Utf8JsonReader reader, - System::Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "json_object" => ResponseFormatProperties.Type.JsonObject, - "text" => ResponseFormatProperties.Type.Text, - _ => (Type)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Type value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseFormatProperties.Type.JsonObject => "json_object", - ResponseFormatProperties.Type.Text => "text", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Chat/ChatRequestProperties/StreamOptions.cs b/src/ArcadeDotnet/Models/Chat/ChatRequestProperties/StreamOptions.cs deleted file mode 100644 index 1d0fd03..0000000 --- a/src/ArcadeDotnet/Models/Chat/ChatRequestProperties/StreamOptions.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Chat.ChatRequestProperties; - -/// -/// Options for streaming response. Only set this when you set stream: true. -/// -[JsonConverter(typeof(ModelConverter))] -public sealed record class StreamOptions : ModelBase, IFromRaw -{ - /// - /// If set, an additional chunk will be streamed before the data: [DONE] message. - /// The usage field on this chunk shows the token usage statistics for the entire - /// request, and the choices field will always be an empty array. All other chunks - /// will also include a usage field, but with a null value. - /// - public bool? IncludeUsage - { - get - { - if (!this.Properties.TryGetValue("include_usage", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["include_usage"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.IncludeUsage; - } - - public StreamOptions() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - StreamOptions(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static StreamOptions FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Chat/ChatResponse.cs b/src/ArcadeDotnet/Models/Chat/ChatResponse.cs index ff651ca..5c8a4c2 100644 --- a/src/ArcadeDotnet/Models/Chat/ChatResponse.cs +++ b/src/ArcadeDotnet/Models/Chat/ChatResponse.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -13,14 +14,19 @@ public string? ID { get { - if (!this.Properties.TryGetValue("id", out JsonElement element)) + if (!this._rawData.TryGetValue("id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -31,14 +37,19 @@ public List? Choices { get { - if (!this.Properties.TryGetValue("choices", out JsonElement element)) + if (!this._rawData.TryGetValue("choices", out JsonElement element)) return null; return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["choices"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["choices"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -49,14 +60,19 @@ public long? Created { get { - if (!this.Properties.TryGetValue("created", out JsonElement element)) + if (!this._rawData.TryGetValue("created", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["created"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["created"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -67,14 +83,19 @@ public string? Model { get { - if (!this.Properties.TryGetValue("model", out JsonElement element)) + if (!this._rawData.TryGetValue("model", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["model"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["model"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -85,14 +106,19 @@ public string? Object { get { - if (!this.Properties.TryGetValue("object", out JsonElement element)) + if (!this._rawData.TryGetValue("object", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["object"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["object"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -103,14 +129,19 @@ public string? SystemFingerprint { get { - if (!this.Properties.TryGetValue("system_fingerprint", out JsonElement element)) + if (!this._rawData.TryGetValue("system_fingerprint", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["system_fingerprint"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["system_fingerprint"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -121,14 +152,19 @@ public Usage? Usage { get { - if (!this.Properties.TryGetValue("usage", out JsonElement element)) + if (!this._rawData.TryGetValue("usage", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["usage"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["usage"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -151,16 +187,21 @@ public override void Validate() public ChatResponse() { } + public ChatResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - ChatResponse(Dictionary properties) + ChatResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static ChatResponse FromRawUnchecked(Dictionary properties) + public static ChatResponse FromRawUnchecked(IReadOnlyDictionary rawData) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Chat/Choice.cs b/src/ArcadeDotnet/Models/Chat/Choice.cs index d3547f2..4378148 100644 --- a/src/ArcadeDotnet/Models/Chat/Choice.cs +++ b/src/ArcadeDotnet/Models/Chat/Choice.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -13,14 +14,19 @@ public string? FinishReason { get { - if (!this.Properties.TryGetValue("finish_reason", out JsonElement element)) + if (!this._rawData.TryGetValue("finish_reason", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["finish_reason"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["finish_reason"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -31,14 +37,19 @@ public long? Index { get { - if (!this.Properties.TryGetValue("index", out JsonElement element)) + if (!this._rawData.TryGetValue("index", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["index"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["index"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -49,14 +60,19 @@ public JsonElement? Logprobs { get { - if (!this.Properties.TryGetValue("logprobs", out JsonElement element)) + if (!this._rawData.TryGetValue("logprobs", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["logprobs"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["logprobs"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -67,14 +83,19 @@ public ChatMessage? Message { get { - if (!this.Properties.TryGetValue("message", out JsonElement element)) + if (!this._rawData.TryGetValue("message", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["message"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["message"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -85,7 +106,7 @@ public List? ToolAuthorizations { get { - if (!this.Properties.TryGetValue("tool_authorizations", out JsonElement element)) + if (!this._rawData.TryGetValue("tool_authorizations", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -93,9 +114,14 @@ public List? ToolAuthorizations ModelBase.SerializerOptions ); } - set + init { - this.Properties["tool_authorizations"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["tool_authorizations"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -106,7 +132,7 @@ public List? ToolMessages { get { - if (!this.Properties.TryGetValue("tool_messages", out JsonElement element)) + if (!this._rawData.TryGetValue("tool_messages", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -114,9 +140,14 @@ public List? ToolMessages ModelBase.SerializerOptions ); } - set + init { - this.Properties["tool_messages"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["tool_messages"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -141,16 +172,21 @@ public override void Validate() public Choice() { } + public Choice(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - Choice(Dictionary properties) + Choice(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static Choice FromRawUnchecked(Dictionary properties) + public static Choice FromRawUnchecked(IReadOnlyDictionary rawData) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Chat/Completions/CompletionCreateParams.cs b/src/ArcadeDotnet/Models/Chat/Completions/CompletionCreateParams.cs index 969635f..31e813b 100644 --- a/src/ArcadeDotnet/Models/Chat/Completions/CompletionCreateParams.cs +++ b/src/ArcadeDotnet/Models/Chat/Completions/CompletionCreateParams.cs @@ -1,10 +1,13 @@ -using System; +using System.Collections.Frozen; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text; using System.Text.Json; +using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Chat.Completions.CompletionCreateParamsProperties; +using ArcadeDotnet.Exceptions; +using System = System; namespace ArcadeDotnet.Models.Chat.Completions; @@ -13,20 +16,29 @@ namespace ArcadeDotnet.Models.Chat.Completions; /// public sealed record class CompletionCreateParams : ParamsBase { - public Dictionary BodyProperties { get; set; } = []; + readonly FreezableDictionary _rawBodyData = []; + public IReadOnlyDictionary RawBodyData + { + get { return this._rawBodyData.Freeze(); } + } public double? FrequencyPenalty { get { - if (!this.BodyProperties.TryGetValue("frequency_penalty", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("frequency_penalty", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["frequency_penalty"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["frequency_penalty"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -42,7 +54,7 @@ public Dictionary? LogitBias { get { - if (!this.BodyProperties.TryGetValue("logit_bias", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("logit_bias", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -50,9 +62,14 @@ public Dictionary? LogitBias ModelBase.SerializerOptions ); } - set + init { - this.BodyProperties["logit_bias"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["logit_bias"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -62,21 +79,25 @@ public Dictionary? LogitBias /// /// LogProbs indicates whether to return log probabilities of the output tokens /// or not. If true, returns the log probabilities of each output token returned - /// in the content of message. This option is currently not available on the - /// gpt-4-vision-preview model. + /// in the content of message. This option is currently not available on the gpt-4-vision-preview model. /// public bool? Logprobs { get { - if (!this.BodyProperties.TryGetValue("logprobs", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("logprobs", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["logprobs"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["logprobs"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -87,14 +108,19 @@ public long? MaxTokens { get { - if (!this.BodyProperties.TryGetValue("max_tokens", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("max_tokens", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["max_tokens"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["max_tokens"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -105,7 +131,7 @@ public List? Messages { get { - if (!this.BodyProperties.TryGetValue("messages", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("messages", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -113,9 +139,14 @@ public List? Messages ModelBase.SerializerOptions ); } - set + init { - this.BodyProperties["messages"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["messages"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -126,14 +157,19 @@ public string? Model { get { - if (!this.BodyProperties.TryGetValue("model", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("model", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["model"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["model"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -144,14 +180,19 @@ public long? N { get { - if (!this.BodyProperties.TryGetValue("n", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("n", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["n"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["n"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -165,14 +206,19 @@ public bool? ParallelToolCalls { get { - if (!this.BodyProperties.TryGetValue("parallel_tool_calls", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("parallel_tool_calls", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["parallel_tool_calls"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["parallel_tool_calls"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -183,35 +229,45 @@ public double? PresencePenalty { get { - if (!this.BodyProperties.TryGetValue("presence_penalty", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("presence_penalty", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["presence_penalty"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["presence_penalty"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public ResponseFormat? ResponseFormat + public global::ArcadeDotnet.Models.Chat.Completions.ResponseFormat? ResponseFormat { get { - if (!this.BodyProperties.TryGetValue("response_format", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("response_format", out JsonElement element)) return null; - return JsonSerializer.Deserialize( + return JsonSerializer.Deserialize( element, ModelBase.SerializerOptions ); } - set + init { - this.BodyProperties["response_format"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["response_format"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -222,14 +278,19 @@ public long? Seed { get { - if (!this.BodyProperties.TryGetValue("seed", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("seed", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["seed"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["seed"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -240,14 +301,19 @@ public List? Stop { get { - if (!this.BodyProperties.TryGetValue("stop", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("stop", out JsonElement element)) return null; return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["stop"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["stop"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -258,14 +324,19 @@ public bool? Stream { get { - if (!this.BodyProperties.TryGetValue("stream", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("stream", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["stream"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["stream"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -275,18 +346,26 @@ public bool? Stream /// /// Options for streaming response. Only set this when you set stream: true. /// - public StreamOptions? StreamOptions + public global::ArcadeDotnet.Models.Chat.Completions.StreamOptions? StreamOptions { get { - if (!this.BodyProperties.TryGetValue("stream_options", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("stream_options", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); } - set + init { - this.BodyProperties["stream_options"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["stream_options"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -297,14 +376,19 @@ public double? Temperature { get { - if (!this.BodyProperties.TryGetValue("temperature", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("temperature", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["temperature"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["temperature"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -318,14 +402,19 @@ public JsonElement? ToolChoice { get { - if (!this.BodyProperties.TryGetValue("tool_choice", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("tool_choice", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["tool_choice"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["tool_choice"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -336,14 +425,19 @@ public JsonElement? Tools { get { - if (!this.BodyProperties.TryGetValue("tools", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("tools", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["tools"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["tools"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -359,14 +453,19 @@ public long? TopLogprobs { get { - if (!this.BodyProperties.TryGetValue("top_logprobs", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("top_logprobs", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["top_logprobs"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["top_logprobs"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -377,14 +476,19 @@ public double? TopP { get { - if (!this.BodyProperties.TryGetValue("top_p", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("top_p", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["top_p"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["top_p"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -395,43 +499,254 @@ public string? User { get { - if (!this.BodyProperties.TryGetValue("user", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("user", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["user"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["user"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public CompletionCreateParams() { } + + public CompletionCreateParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + CompletionCreateParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData, + FrozenDictionary rawBodyData + ) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/chat/completions") + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } +#pragma warning restore CS8618 + + public static CompletionCreateParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData), + FrozenDictionary.ToFrozenDictionary(rawBodyData) + ); + } + + public override System::Uri Url(ClientOptions options) + { + return new System::UriBuilder( + options.BaseUrl.ToString().TrimEnd('/') + "/v1/chat/completions" + ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } internal override StringContent? BodyContent() { - return new( - JsonSerializer.Serialize(this.BodyProperties), - Encoding.UTF8, - "application/json" - ); + return new(JsonSerializer.Serialize(this.RawBodyData), Encoding.UTF8, "application/json"); } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } } } + +[JsonConverter(typeof(ModelConverter))] +public sealed record class ResponseFormat + : ModelBase, + IFromRaw +{ + public ApiEnum? Type + { + get + { + if (!this._rawData.TryGetValue("type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + this.Type?.Validate(); + } + + public ResponseFormat() { } + + public ResponseFormat(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ResponseFormat(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static global::ArcadeDotnet.Models.Chat.Completions.ResponseFormat FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(global::ArcadeDotnet.Models.Chat.Completions.TypeConverter))] +public enum Type +{ + JsonObject, + Text, +} + +sealed class TypeConverter : JsonConverter +{ + public override global::ArcadeDotnet.Models.Chat.Completions.Type Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "json_object" => global::ArcadeDotnet.Models.Chat.Completions.Type.JsonObject, + "text" => global::ArcadeDotnet.Models.Chat.Completions.Type.Text, + _ => (global::ArcadeDotnet.Models.Chat.Completions.Type)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + global::ArcadeDotnet.Models.Chat.Completions.Type value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + global::ArcadeDotnet.Models.Chat.Completions.Type.JsonObject => "json_object", + global::ArcadeDotnet.Models.Chat.Completions.Type.Text => "text", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +/// +/// Options for streaming response. Only set this when you set stream: true. +/// +[JsonConverter(typeof(ModelConverter))] +public sealed record class StreamOptions + : ModelBase, + IFromRaw +{ + /// + /// If set, an additional chunk will be streamed before the data: [DONE] message. + /// The usage field on this chunk shows the token usage statistics for the entire + /// request, and the choices field will always be an empty array. All other chunks + /// will also include a usage field, but with a null value. + /// + public bool? IncludeUsage + { + get + { + if (!this._rawData.TryGetValue("include_usage", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["include_usage"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.IncludeUsage; + } + + public StreamOptions() { } + + public StreamOptions(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + StreamOptions(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static global::ArcadeDotnet.Models.Chat.Completions.StreamOptions FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} diff --git a/src/ArcadeDotnet/Models/Chat/Completions/CompletionCreateParamsProperties/ResponseFormat.cs b/src/ArcadeDotnet/Models/Chat/Completions/CompletionCreateParamsProperties/ResponseFormat.cs deleted file mode 100644 index 9d4f6ba..0000000 --- a/src/ArcadeDotnet/Models/Chat/Completions/CompletionCreateParamsProperties/ResponseFormat.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Chat.Completions.CompletionCreateParamsProperties.ResponseFormatProperties; - -namespace ArcadeDotnet.Models.Chat.Completions.CompletionCreateParamsProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class ResponseFormat : ModelBase, IFromRaw -{ - public ApiEnum? Type - { - get - { - if (!this.Properties.TryGetValue("type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - this.Type?.Validate(); - } - - public ResponseFormat() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - ResponseFormat(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static ResponseFormat FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Chat/Completions/CompletionCreateParamsProperties/ResponseFormatProperties/Type.cs b/src/ArcadeDotnet/Models/Chat/Completions/CompletionCreateParamsProperties/ResponseFormatProperties/Type.cs deleted file mode 100644 index 282b647..0000000 --- a/src/ArcadeDotnet/Models/Chat/Completions/CompletionCreateParamsProperties/ResponseFormatProperties/Type.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; -using System = System; - -namespace ArcadeDotnet.Models.Chat.Completions.CompletionCreateParamsProperties.ResponseFormatProperties; - -[JsonConverter(typeof(TypeConverter))] -public enum Type -{ - JsonObject, - Text, -} - -sealed class TypeConverter : JsonConverter -{ - public override Type Read( - ref Utf8JsonReader reader, - System::Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "json_object" => ResponseFormatProperties.Type.JsonObject, - "text" => ResponseFormatProperties.Type.Text, - _ => (Type)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Type value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - ResponseFormatProperties.Type.JsonObject => "json_object", - ResponseFormatProperties.Type.Text => "text", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Chat/Completions/CompletionCreateParamsProperties/StreamOptions.cs b/src/ArcadeDotnet/Models/Chat/Completions/CompletionCreateParamsProperties/StreamOptions.cs deleted file mode 100644 index 846e13f..0000000 --- a/src/ArcadeDotnet/Models/Chat/Completions/CompletionCreateParamsProperties/StreamOptions.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Chat.Completions.CompletionCreateParamsProperties; - -/// -/// Options for streaming response. Only set this when you set stream: true. -/// -[JsonConverter(typeof(ModelConverter))] -public sealed record class StreamOptions : ModelBase, IFromRaw -{ - /// - /// If set, an additional chunk will be streamed before the data: [DONE] message. - /// The usage field on this chunk shows the token usage statistics for the entire - /// request, and the choices field will always be an empty array. All other chunks - /// will also include a usage field, but with a null value. - /// - public bool? IncludeUsage - { - get - { - if (!this.Properties.TryGetValue("include_usage", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["include_usage"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.IncludeUsage; - } - - public StreamOptions() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - StreamOptions(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static StreamOptions FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Chat/Usage.cs b/src/ArcadeDotnet/Models/Chat/Usage.cs index dd8b70e..da4de75 100644 --- a/src/ArcadeDotnet/Models/Chat/Usage.cs +++ b/src/ArcadeDotnet/Models/Chat/Usage.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -13,14 +14,19 @@ public long? CompletionTokens { get { - if (!this.Properties.TryGetValue("completion_tokens", out JsonElement element)) + if (!this._rawData.TryGetValue("completion_tokens", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["completion_tokens"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["completion_tokens"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -31,14 +37,19 @@ public long? PromptTokens { get { - if (!this.Properties.TryGetValue("prompt_tokens", out JsonElement element)) + if (!this._rawData.TryGetValue("prompt_tokens", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["prompt_tokens"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["prompt_tokens"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -49,14 +60,19 @@ public long? TotalTokens { get { - if (!this.Properties.TryGetValue("total_tokens", out JsonElement element)) + if (!this._rawData.TryGetValue("total_tokens", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["total_tokens"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["total_tokens"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -72,16 +88,21 @@ public override void Validate() public Usage() { } + public Usage(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - Usage(Dictionary properties) + Usage(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static Usage FromRawUnchecked(Dictionary properties) + public static Usage FromRawUnchecked(IReadOnlyDictionary rawData) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Error.cs b/src/ArcadeDotnet/Models/Error.cs index 82c01a1..caabc92 100644 --- a/src/ArcadeDotnet/Models/Error.cs +++ b/src/ArcadeDotnet/Models/Error.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -13,14 +14,19 @@ public string? Message { get { - if (!this.Properties.TryGetValue("message", out JsonElement element)) + if (!this._rawData.TryGetValue("message", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["message"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["message"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -31,14 +37,19 @@ public string? Name { get { - if (!this.Properties.TryGetValue("name", out JsonElement element)) + if (!this._rawData.TryGetValue("name", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["name"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["name"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -53,16 +64,21 @@ public override void Validate() public Error() { } + public Error(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - Error(Dictionary properties) + Error(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static Error FromRawUnchecked(Dictionary properties) + public static Error FromRawUnchecked(IReadOnlyDictionary rawData) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Health/HealthCheckParams.cs b/src/ArcadeDotnet/Models/Health/HealthCheckParams.cs index b378f9f..b082456 100644 --- a/src/ArcadeDotnet/Models/Health/HealthCheckParams.cs +++ b/src/ArcadeDotnet/Models/Health/HealthCheckParams.cs @@ -1,5 +1,9 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; +using System.Text.Json; using ArcadeDotnet.Core; namespace ArcadeDotnet.Models.Health; @@ -9,18 +13,52 @@ namespace ArcadeDotnet.Models.Health; /// public sealed record class HealthCheckParams : ParamsBase { - public override Uri Url(IArcadeClient client) + public HealthCheckParams() { } + + public HealthCheckParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + HealthCheckParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static HealthCheckParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/health") + return new UriBuilder(options.BaseUrl.ToString().TrimEnd('/') + "/v1/health") { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Health/HealthSchema.cs b/src/ArcadeDotnet/Models/Health/HealthSchema.cs index 06a7513..dfba679 100644 --- a/src/ArcadeDotnet/Models/Health/HealthSchema.cs +++ b/src/ArcadeDotnet/Models/Health/HealthSchema.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -13,14 +14,19 @@ public bool? Healthy { get { - if (!this.Properties.TryGetValue("healthy", out JsonElement element)) + if (!this._rawData.TryGetValue("healthy", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["healthy"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["healthy"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -34,16 +40,21 @@ public override void Validate() public HealthSchema() { } + public HealthSchema(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - HealthSchema(Dictionary properties) + HealthSchema(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static HealthSchema FromRawUnchecked(Dictionary properties) + public static HealthSchema FromRawUnchecked(IReadOnlyDictionary rawData) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Tools/AuthorizeToolRequest.cs b/src/ArcadeDotnet/Models/Tools/AuthorizeToolRequest.cs index 94211b4..4bca686 100644 --- a/src/ArcadeDotnet/Models/Tools/AuthorizeToolRequest.cs +++ b/src/ArcadeDotnet/Models/Tools/AuthorizeToolRequest.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -15,7 +16,7 @@ public required string ToolName { get { - if (!this.Properties.TryGetValue("tool_name", out JsonElement element)) + if (!this._rawData.TryGetValue("tool_name", out JsonElement element)) throw new ArcadeInvalidDataException( "'tool_name' cannot be null", new ArgumentOutOfRangeException("tool_name", "Missing required argument") @@ -27,9 +28,9 @@ public required string ToolName new ArgumentNullException("tool_name") ); } - set + init { - this.Properties["tool_name"] = JsonSerializer.SerializeToElement( + this._rawData["tool_name"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -43,14 +44,19 @@ public string? NextUri { get { - if (!this.Properties.TryGetValue("next_uri", out JsonElement element)) + if (!this._rawData.TryGetValue("next_uri", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["next_uri"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["next_uri"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -64,14 +70,19 @@ public string? ToolVersion { get { - if (!this.Properties.TryGetValue("tool_version", out JsonElement element)) + if (!this._rawData.TryGetValue("tool_version", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["tool_version"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["tool_version"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -85,14 +96,19 @@ public string? UserID { get { - if (!this.Properties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawData.TryGetValue("user_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["user_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -109,17 +125,24 @@ public override void Validate() public AuthorizeToolRequest() { } + public AuthorizeToolRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - AuthorizeToolRequest(Dictionary properties) + AuthorizeToolRequest(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static AuthorizeToolRequest FromRawUnchecked(Dictionary properties) + public static AuthorizeToolRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } [SetsRequiredMembers] diff --git a/src/ArcadeDotnet/Models/Tools/ExecuteToolRequest.cs b/src/ArcadeDotnet/Models/Tools/ExecuteToolRequest.cs index 0d7e85a..0ee55a7 100644 --- a/src/ArcadeDotnet/Models/Tools/ExecuteToolRequest.cs +++ b/src/ArcadeDotnet/Models/Tools/ExecuteToolRequest.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -15,7 +16,7 @@ public required string ToolName { get { - if (!this.Properties.TryGetValue("tool_name", out JsonElement element)) + if (!this._rawData.TryGetValue("tool_name", out JsonElement element)) throw new ArcadeInvalidDataException( "'tool_name' cannot be null", new ArgumentOutOfRangeException("tool_name", "Missing required argument") @@ -27,9 +28,9 @@ public required string ToolName new ArgumentNullException("tool_name") ); } - set + init { - this.Properties["tool_name"] = JsonSerializer.SerializeToElement( + this._rawData["tool_name"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -44,14 +45,19 @@ public bool? IncludeErrorStacktrace { get { - if (!this.Properties.TryGetValue("include_error_stacktrace", out JsonElement element)) + if (!this._rawData.TryGetValue("include_error_stacktrace", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["include_error_stacktrace"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["include_error_stacktrace"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -65,7 +71,7 @@ public Dictionary? Input { get { - if (!this.Properties.TryGetValue("input", out JsonElement element)) + if (!this._rawData.TryGetValue("input", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -73,9 +79,14 @@ public Dictionary? Input ModelBase.SerializerOptions ); } - set + init { - this.Properties["input"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["input"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -90,14 +101,19 @@ public string? RunAt { get { - if (!this.Properties.TryGetValue("run_at", out JsonElement element)) + if (!this._rawData.TryGetValue("run_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["run_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["run_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -111,14 +127,19 @@ public string? ToolVersion { get { - if (!this.Properties.TryGetValue("tool_version", out JsonElement element)) + if (!this._rawData.TryGetValue("tool_version", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["tool_version"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["tool_version"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -129,14 +150,19 @@ public string? UserID { get { - if (!this.Properties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawData.TryGetValue("user_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["user_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -147,13 +173,7 @@ public override void Validate() { _ = this.ToolName; _ = this.IncludeErrorStacktrace; - if (this.Input != null) - { - foreach (var item in this.Input.Values) - { - _ = item; - } - } + _ = this.Input; _ = this.RunAt; _ = this.ToolVersion; _ = this.UserID; @@ -161,17 +181,24 @@ public override void Validate() public ExecuteToolRequest() { } + public ExecuteToolRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - ExecuteToolRequest(Dictionary properties) + ExecuteToolRequest(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static ExecuteToolRequest FromRawUnchecked(Dictionary properties) + public static ExecuteToolRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } [SetsRequiredMembers] diff --git a/src/ArcadeDotnet/Models/Tools/ExecuteToolResponse.cs b/src/ArcadeDotnet/Models/Tools/ExecuteToolResponse.cs index 311760d..c1c1abb 100644 --- a/src/ArcadeDotnet/Models/Tools/ExecuteToolResponse.cs +++ b/src/ArcadeDotnet/Models/Tools/ExecuteToolResponse.cs @@ -1,9 +1,11 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Tools.ExecuteToolResponseProperties; +using ArcadeDotnet.Exceptions; +using System = System; namespace ArcadeDotnet.Models.Tools; @@ -14,14 +16,19 @@ public string? ID { get { - if (!this.Properties.TryGetValue("id", out JsonElement element)) + if (!this._rawData.TryGetValue("id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -32,14 +39,19 @@ public double? Duration { get { - if (!this.Properties.TryGetValue("duration", out JsonElement element)) + if (!this._rawData.TryGetValue("duration", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["duration"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["duration"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -50,14 +62,19 @@ public string? ExecutionID { get { - if (!this.Properties.TryGetValue("execution_id", out JsonElement element)) + if (!this._rawData.TryGetValue("execution_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["execution_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["execution_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -68,14 +85,19 @@ public string? ExecutionType { get { - if (!this.Properties.TryGetValue("execution_type", out JsonElement element)) + if (!this._rawData.TryGetValue("execution_type", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["execution_type"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["execution_type"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -86,14 +108,19 @@ public string? FinishedAt { get { - if (!this.Properties.TryGetValue("finished_at", out JsonElement element)) + if (!this._rawData.TryGetValue("finished_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["finished_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["finished_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -104,14 +131,19 @@ public Output? Output { get { - if (!this.Properties.TryGetValue("output", out JsonElement element)) + if (!this._rawData.TryGetValue("output", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["output"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["output"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -122,14 +154,19 @@ public string? RunAt { get { - if (!this.Properties.TryGetValue("run_at", out JsonElement element)) + if (!this._rawData.TryGetValue("run_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["run_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["run_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -140,14 +177,19 @@ public string? Status { get { - if (!this.Properties.TryGetValue("status", out JsonElement element)) + if (!this._rawData.TryGetValue("status", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["status"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["status"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -163,14 +205,19 @@ public bool? Success { get { - if (!this.Properties.TryGetValue("success", out JsonElement element)) + if (!this._rawData.TryGetValue("success", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["success"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["success"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -192,16 +239,601 @@ public override void Validate() public ExecuteToolResponse() { } + public ExecuteToolResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ExecuteToolResponse(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static ExecuteToolResponse FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Output : ModelBase, IFromRaw +{ + public AuthorizationResponse? Authorization + { + get + { + if (!this._rawData.TryGetValue("authorization", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["authorization"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public global::ArcadeDotnet.Models.Tools.Error? Error + { + get + { + if (!this._rawData.TryGetValue("error", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["error"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public List? Logs + { + get + { + if (!this._rawData.TryGetValue("logs", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["logs"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public JsonElement? Value + { + get + { + if (!this._rawData.TryGetValue("value", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["value"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + this.Authorization?.Validate(); + this.Error?.Validate(); + foreach (var item in this.Logs ?? []) + { + item.Validate(); + } + _ = this.Value; + } + + public Output() { } + + public Output(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Output(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Output FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Error : ModelBase, IFromRaw +{ + public required bool CanRetry + { + get + { + if (!this._rawData.TryGetValue("can_retry", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'can_retry' cannot be null", + new System::ArgumentOutOfRangeException( + "can_retry", + "Missing required argument" + ) + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + this._rawData["can_retry"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required ApiEnum Kind + { + get + { + if (!this._rawData.TryGetValue("kind", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'kind' cannot be null", + new System::ArgumentOutOfRangeException("kind", "Missing required argument") + ); + + return JsonSerializer.Deserialize>( + element, + ModelBase.SerializerOptions + ); + } + init + { + this._rawData["kind"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required string Message + { + get + { + if (!this._rawData.TryGetValue("message", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'message' cannot be null", + new System::ArgumentOutOfRangeException("message", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'message' cannot be null", + new System::ArgumentNullException("message") + ); + } + init + { + this._rawData["message"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AdditionalPromptContent + { + get + { + if (!this._rawData.TryGetValue("additional_prompt_content", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["additional_prompt_content"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? DeveloperMessage + { + get + { + if (!this._rawData.TryGetValue("developer_message", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["developer_message"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Extra + { + get + { + if (!this._rawData.TryGetValue("extra", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["extra"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public long? RetryAfterMs + { + get + { + if (!this._rawData.TryGetValue("retry_after_ms", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["retry_after_ms"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Stacktrace + { + get + { + if (!this._rawData.TryGetValue("stacktrace", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["stacktrace"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public long? StatusCode + { + get + { + if (!this._rawData.TryGetValue("status_code", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["status_code"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.CanRetry; + this.Kind.Validate(); + _ = this.Message; + _ = this.AdditionalPromptContent; + _ = this.DeveloperMessage; + _ = this.Extra; + _ = this.RetryAfterMs; + _ = this.Stacktrace; + _ = this.StatusCode; + } + + public Error() { } + + public Error(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Error(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static global::ArcadeDotnet.Models.Tools.Error FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(KindConverter))] +public enum Kind +{ + ToolkitLoadFailed, + ToolDefinitionBadDefinition, + ToolDefinitionBadInputSchema, + ToolDefinitionBadOutputSchema, + ToolRequirementsNotMet, + ToolRuntimeBadInputValue, + ToolRuntimeBadOutputValue, + ToolRuntimeRetry, + ToolRuntimeContextRequired, + ToolRuntimeFatal, + UpstreamRuntimeBadRequest, + UpstreamRuntimeAuthError, + UpstreamRuntimeNotFound, + UpstreamRuntimeValidationError, + UpstreamRuntimeRateLimit, + UpstreamRuntimeServerError, + UpstreamRuntimeUnmapped, + Unknown, +} + +sealed class KindConverter : JsonConverter +{ + public override Kind Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "TOOLKIT_LOAD_FAILED" => Kind.ToolkitLoadFailed, + "TOOL_DEFINITION_BAD_DEFINITION" => Kind.ToolDefinitionBadDefinition, + "TOOL_DEFINITION_BAD_INPUT_SCHEMA" => Kind.ToolDefinitionBadInputSchema, + "TOOL_DEFINITION_BAD_OUTPUT_SCHEMA" => Kind.ToolDefinitionBadOutputSchema, + "TOOL_REQUIREMENTS_NOT_MET" => Kind.ToolRequirementsNotMet, + "TOOL_RUNTIME_BAD_INPUT_VALUE" => Kind.ToolRuntimeBadInputValue, + "TOOL_RUNTIME_BAD_OUTPUT_VALUE" => Kind.ToolRuntimeBadOutputValue, + "TOOL_RUNTIME_RETRY" => Kind.ToolRuntimeRetry, + "TOOL_RUNTIME_CONTEXT_REQUIRED" => Kind.ToolRuntimeContextRequired, + "TOOL_RUNTIME_FATAL" => Kind.ToolRuntimeFatal, + "UPSTREAM_RUNTIME_BAD_REQUEST" => Kind.UpstreamRuntimeBadRequest, + "UPSTREAM_RUNTIME_AUTH_ERROR" => Kind.UpstreamRuntimeAuthError, + "UPSTREAM_RUNTIME_NOT_FOUND" => Kind.UpstreamRuntimeNotFound, + "UPSTREAM_RUNTIME_VALIDATION_ERROR" => Kind.UpstreamRuntimeValidationError, + "UPSTREAM_RUNTIME_RATE_LIMIT" => Kind.UpstreamRuntimeRateLimit, + "UPSTREAM_RUNTIME_SERVER_ERROR" => Kind.UpstreamRuntimeServerError, + "UPSTREAM_RUNTIME_UNMAPPED" => Kind.UpstreamRuntimeUnmapped, + "UNKNOWN" => Kind.Unknown, + _ => (Kind)(-1), + }; + } + + public override void Write(Utf8JsonWriter writer, Kind value, JsonSerializerOptions options) + { + JsonSerializer.Serialize( + writer, + value switch + { + Kind.ToolkitLoadFailed => "TOOLKIT_LOAD_FAILED", + Kind.ToolDefinitionBadDefinition => "TOOL_DEFINITION_BAD_DEFINITION", + Kind.ToolDefinitionBadInputSchema => "TOOL_DEFINITION_BAD_INPUT_SCHEMA", + Kind.ToolDefinitionBadOutputSchema => "TOOL_DEFINITION_BAD_OUTPUT_SCHEMA", + Kind.ToolRequirementsNotMet => "TOOL_REQUIREMENTS_NOT_MET", + Kind.ToolRuntimeBadInputValue => "TOOL_RUNTIME_BAD_INPUT_VALUE", + Kind.ToolRuntimeBadOutputValue => "TOOL_RUNTIME_BAD_OUTPUT_VALUE", + Kind.ToolRuntimeRetry => "TOOL_RUNTIME_RETRY", + Kind.ToolRuntimeContextRequired => "TOOL_RUNTIME_CONTEXT_REQUIRED", + Kind.ToolRuntimeFatal => "TOOL_RUNTIME_FATAL", + Kind.UpstreamRuntimeBadRequest => "UPSTREAM_RUNTIME_BAD_REQUEST", + Kind.UpstreamRuntimeAuthError => "UPSTREAM_RUNTIME_AUTH_ERROR", + Kind.UpstreamRuntimeNotFound => "UPSTREAM_RUNTIME_NOT_FOUND", + Kind.UpstreamRuntimeValidationError => "UPSTREAM_RUNTIME_VALIDATION_ERROR", + Kind.UpstreamRuntimeRateLimit => "UPSTREAM_RUNTIME_RATE_LIMIT", + Kind.UpstreamRuntimeServerError => "UPSTREAM_RUNTIME_SERVER_ERROR", + Kind.UpstreamRuntimeUnmapped => "UPSTREAM_RUNTIME_UNMAPPED", + Kind.Unknown => "UNKNOWN", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Log : ModelBase, IFromRaw +{ + public required string Level + { + get + { + if (!this._rawData.TryGetValue("level", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'level' cannot be null", + new System::ArgumentOutOfRangeException("level", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'level' cannot be null", + new System::ArgumentNullException("level") + ); + } + init + { + this._rawData["level"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required string Message + { + get + { + if (!this._rawData.TryGetValue("message", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'message' cannot be null", + new System::ArgumentOutOfRangeException("message", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'message' cannot be null", + new System::ArgumentNullException("message") + ); + } + init + { + this._rawData["message"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Subtype + { + get + { + if (!this._rawData.TryGetValue("subtype", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["subtype"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Level; + _ = this.Message; + _ = this.Subtype; + } + + public Log() { } + + public Log(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - ExecuteToolResponse(Dictionary properties) + Log(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static ExecuteToolResponse FromRawUnchecked(Dictionary properties) + public static Log FromRawUnchecked(IReadOnlyDictionary rawData) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Tools/ExecuteToolResponseProperties/Output.cs b/src/ArcadeDotnet/Models/Tools/ExecuteToolResponseProperties/Output.cs deleted file mode 100644 index 920ee4f..0000000 --- a/src/ArcadeDotnet/Models/Tools/ExecuteToolResponseProperties/Output.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using OutputProperties = ArcadeDotnet.Models.Tools.ExecuteToolResponseProperties.OutputProperties; - -namespace ArcadeDotnet.Models.Tools.ExecuteToolResponseProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Output : ModelBase, IFromRaw -{ - public AuthorizationResponse? Authorization - { - get - { - if (!this.Properties.TryGetValue("authorization", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["authorization"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public OutputProperties::Error? Error - { - get - { - if (!this.Properties.TryGetValue("error", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["error"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public List? Logs - { - get - { - if (!this.Properties.TryGetValue("logs", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["logs"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public JsonElement? Value - { - get - { - if (!this.Properties.TryGetValue("value", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["value"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - this.Authorization?.Validate(); - this.Error?.Validate(); - foreach (var item in this.Logs ?? []) - { - item.Validate(); - } - _ = this.Value; - } - - public Output() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Output(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Output FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ExecuteToolResponseProperties/OutputProperties/Error.cs b/src/ArcadeDotnet/Models/Tools/ExecuteToolResponseProperties/OutputProperties/Error.cs deleted file mode 100644 index d67a309..0000000 --- a/src/ArcadeDotnet/Models/Tools/ExecuteToolResponseProperties/OutputProperties/Error.cs +++ /dev/null @@ -1,229 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Tools.ExecuteToolResponseProperties.OutputProperties.ErrorProperties; - -namespace ArcadeDotnet.Models.Tools.ExecuteToolResponseProperties.OutputProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Error : ModelBase, IFromRaw -{ - public required bool CanRetry - { - get - { - if (!this.Properties.TryGetValue("can_retry", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'can_retry' cannot be null", - new ArgumentOutOfRangeException("can_retry", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["can_retry"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required ApiEnum Kind - { - get - { - if (!this.Properties.TryGetValue("kind", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'kind' cannot be null", - new ArgumentOutOfRangeException("kind", "Missing required argument") - ); - - return JsonSerializer.Deserialize>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["kind"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required string Message - { - get - { - if (!this.Properties.TryGetValue("message", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'message' cannot be null", - new ArgumentOutOfRangeException("message", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'message' cannot be null", - new ArgumentNullException("message") - ); - } - set - { - this.Properties["message"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? AdditionalPromptContent - { - get - { - if (!this.Properties.TryGetValue("additional_prompt_content", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["additional_prompt_content"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? DeveloperMessage - { - get - { - if (!this.Properties.TryGetValue("developer_message", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["developer_message"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Extra - { - get - { - if (!this.Properties.TryGetValue("extra", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["extra"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public long? RetryAfterMs - { - get - { - if (!this.Properties.TryGetValue("retry_after_ms", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["retry_after_ms"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Stacktrace - { - get - { - if (!this.Properties.TryGetValue("stacktrace", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["stacktrace"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public long? StatusCode - { - get - { - if (!this.Properties.TryGetValue("status_code", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["status_code"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.CanRetry; - this.Kind.Validate(); - _ = this.Message; - _ = this.AdditionalPromptContent; - _ = this.DeveloperMessage; - if (this.Extra != null) - { - foreach (var item in this.Extra.Values) - { - _ = item; - } - } - _ = this.RetryAfterMs; - _ = this.Stacktrace; - _ = this.StatusCode; - } - - public Error() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Error(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Error FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ExecuteToolResponseProperties/OutputProperties/ErrorProperties/Kind.cs b/src/ArcadeDotnet/Models/Tools/ExecuteToolResponseProperties/OutputProperties/ErrorProperties/Kind.cs deleted file mode 100644 index 81bf826..0000000 --- a/src/ArcadeDotnet/Models/Tools/ExecuteToolResponseProperties/OutputProperties/ErrorProperties/Kind.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Tools.ExecuteToolResponseProperties.OutputProperties.ErrorProperties; - -[JsonConverter(typeof(KindConverter))] -public enum Kind -{ - ToolkitLoadFailed, - ToolDefinitionBadDefinition, - ToolDefinitionBadInputSchema, - ToolDefinitionBadOutputSchema, - ToolRequirementsNotMet, - ToolRuntimeBadInputValue, - ToolRuntimeBadOutputValue, - ToolRuntimeRetry, - ToolRuntimeContextRequired, - ToolRuntimeFatal, - UpstreamRuntimeBadRequest, - UpstreamRuntimeAuthError, - UpstreamRuntimeNotFound, - UpstreamRuntimeValidationError, - UpstreamRuntimeRateLimit, - UpstreamRuntimeServerError, - UpstreamRuntimeUnmapped, - Unknown, -} - -sealed class KindConverter : JsonConverter -{ - public override Kind Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "TOOLKIT_LOAD_FAILED" => Kind.ToolkitLoadFailed, - "TOOL_DEFINITION_BAD_DEFINITION" => Kind.ToolDefinitionBadDefinition, - "TOOL_DEFINITION_BAD_INPUT_SCHEMA" => Kind.ToolDefinitionBadInputSchema, - "TOOL_DEFINITION_BAD_OUTPUT_SCHEMA" => Kind.ToolDefinitionBadOutputSchema, - "TOOL_REQUIREMENTS_NOT_MET" => Kind.ToolRequirementsNotMet, - "TOOL_RUNTIME_BAD_INPUT_VALUE" => Kind.ToolRuntimeBadInputValue, - "TOOL_RUNTIME_BAD_OUTPUT_VALUE" => Kind.ToolRuntimeBadOutputValue, - "TOOL_RUNTIME_RETRY" => Kind.ToolRuntimeRetry, - "TOOL_RUNTIME_CONTEXT_REQUIRED" => Kind.ToolRuntimeContextRequired, - "TOOL_RUNTIME_FATAL" => Kind.ToolRuntimeFatal, - "UPSTREAM_RUNTIME_BAD_REQUEST" => Kind.UpstreamRuntimeBadRequest, - "UPSTREAM_RUNTIME_AUTH_ERROR" => Kind.UpstreamRuntimeAuthError, - "UPSTREAM_RUNTIME_NOT_FOUND" => Kind.UpstreamRuntimeNotFound, - "UPSTREAM_RUNTIME_VALIDATION_ERROR" => Kind.UpstreamRuntimeValidationError, - "UPSTREAM_RUNTIME_RATE_LIMIT" => Kind.UpstreamRuntimeRateLimit, - "UPSTREAM_RUNTIME_SERVER_ERROR" => Kind.UpstreamRuntimeServerError, - "UPSTREAM_RUNTIME_UNMAPPED" => Kind.UpstreamRuntimeUnmapped, - "UNKNOWN" => Kind.Unknown, - _ => (Kind)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Kind value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - Kind.ToolkitLoadFailed => "TOOLKIT_LOAD_FAILED", - Kind.ToolDefinitionBadDefinition => "TOOL_DEFINITION_BAD_DEFINITION", - Kind.ToolDefinitionBadInputSchema => "TOOL_DEFINITION_BAD_INPUT_SCHEMA", - Kind.ToolDefinitionBadOutputSchema => "TOOL_DEFINITION_BAD_OUTPUT_SCHEMA", - Kind.ToolRequirementsNotMet => "TOOL_REQUIREMENTS_NOT_MET", - Kind.ToolRuntimeBadInputValue => "TOOL_RUNTIME_BAD_INPUT_VALUE", - Kind.ToolRuntimeBadOutputValue => "TOOL_RUNTIME_BAD_OUTPUT_VALUE", - Kind.ToolRuntimeRetry => "TOOL_RUNTIME_RETRY", - Kind.ToolRuntimeContextRequired => "TOOL_RUNTIME_CONTEXT_REQUIRED", - Kind.ToolRuntimeFatal => "TOOL_RUNTIME_FATAL", - Kind.UpstreamRuntimeBadRequest => "UPSTREAM_RUNTIME_BAD_REQUEST", - Kind.UpstreamRuntimeAuthError => "UPSTREAM_RUNTIME_AUTH_ERROR", - Kind.UpstreamRuntimeNotFound => "UPSTREAM_RUNTIME_NOT_FOUND", - Kind.UpstreamRuntimeValidationError => "UPSTREAM_RUNTIME_VALIDATION_ERROR", - Kind.UpstreamRuntimeRateLimit => "UPSTREAM_RUNTIME_RATE_LIMIT", - Kind.UpstreamRuntimeServerError => "UPSTREAM_RUNTIME_SERVER_ERROR", - Kind.UpstreamRuntimeUnmapped => "UPSTREAM_RUNTIME_UNMAPPED", - Kind.Unknown => "UNKNOWN", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ExecuteToolResponseProperties/OutputProperties/Log.cs b/src/ArcadeDotnet/Models/Tools/ExecuteToolResponseProperties/OutputProperties/Log.cs deleted file mode 100644 index 9bdbc68..0000000 --- a/src/ArcadeDotnet/Models/Tools/ExecuteToolResponseProperties/OutputProperties/Log.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Tools.ExecuteToolResponseProperties.OutputProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Log : ModelBase, IFromRaw -{ - public required string Level - { - get - { - if (!this.Properties.TryGetValue("level", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'level' cannot be null", - new ArgumentOutOfRangeException("level", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'level' cannot be null", - new ArgumentNullException("level") - ); - } - set - { - this.Properties["level"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required string Message - { - get - { - if (!this.Properties.TryGetValue("message", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'message' cannot be null", - new ArgumentOutOfRangeException("message", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'message' cannot be null", - new ArgumentNullException("message") - ); - } - set - { - this.Properties["message"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Subtype - { - get - { - if (!this.Properties.TryGetValue("subtype", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["subtype"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Level; - _ = this.Message; - _ = this.Subtype; - } - - public Log() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Log(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Log FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/Formatted/FormattedGetParams.cs b/src/ArcadeDotnet/Models/Tools/Formatted/FormattedGetParams.cs index 7596cc1..1614d0b 100644 --- a/src/ArcadeDotnet/Models/Tools/Formatted/FormattedGetParams.cs +++ b/src/ArcadeDotnet/Models/Tools/Formatted/FormattedGetParams.cs @@ -1,4 +1,7 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text.Json; using ArcadeDotnet.Core; @@ -10,7 +13,7 @@ namespace ArcadeDotnet.Models.Tools.Formatted; /// public sealed record class FormattedGetParams : ParamsBase { - public required string Name; + public string? Name { get; init; } /// /// Provider format @@ -19,14 +22,19 @@ public string? Format { get { - if (!this.QueryProperties.TryGetValue("format", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("format", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["format"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["format"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -40,35 +48,74 @@ public string? UserID { get { - if (!this.QueryProperties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("user_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["user_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public FormattedGetParams() { } + + public FormattedGetParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + FormattedGetParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static FormattedGetParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { return new UriBuilder( - client.BaseUrl.ToString().TrimEnd('/') + options.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/formatted_tools/{0}", this.Name) ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Tools/Formatted/FormattedListPageResponse.cs b/src/ArcadeDotnet/Models/Tools/Formatted/FormattedListPageResponse.cs index 0418ced..9b7d1fd 100644 --- a/src/ArcadeDotnet/Models/Tools/Formatted/FormattedListPageResponse.cs +++ b/src/ArcadeDotnet/Models/Tools/Formatted/FormattedListPageResponse.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -15,7 +16,7 @@ public List? Items { get { - if (!this.Properties.TryGetValue("items", out JsonElement element)) + if (!this._rawData.TryGetValue("items", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -23,9 +24,14 @@ public List? Items ModelBase.SerializerOptions ); } - set + init { - this.Properties["items"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["items"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -36,14 +42,19 @@ public long? Limit { get { - if (!this.Properties.TryGetValue("limit", out JsonElement element)) + if (!this._rawData.TryGetValue("limit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["limit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["limit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -54,14 +65,19 @@ public long? Offset { get { - if (!this.Properties.TryGetValue("offset", out JsonElement element)) + if (!this._rawData.TryGetValue("offset", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["offset"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["offset"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -72,14 +88,19 @@ public long? PageCount { get { - if (!this.Properties.TryGetValue("page_count", out JsonElement element)) + if (!this._rawData.TryGetValue("page_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["page_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["page_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -90,14 +111,19 @@ public long? TotalCount { get { - if (!this.Properties.TryGetValue("total_count", out JsonElement element)) + if (!this._rawData.TryGetValue("total_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["total_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["total_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -106,10 +132,7 @@ public long? TotalCount public override void Validate() { - foreach (var item in this.Items ?? []) - { - _ = item; - } + _ = this.Items; _ = this.Limit; _ = this.Offset; _ = this.PageCount; @@ -118,18 +141,23 @@ public override void Validate() public FormattedListPageResponse() { } + public FormattedListPageResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - FormattedListPageResponse(Dictionary properties) + FormattedListPageResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 public static FormattedListPageResponse FromRawUnchecked( - Dictionary properties + IReadOnlyDictionary rawData ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Tools/Formatted/FormattedListParams.cs b/src/ArcadeDotnet/Models/Tools/Formatted/FormattedListParams.cs index 50337ae..317d011 100644 --- a/src/ArcadeDotnet/Models/Tools/Formatted/FormattedListParams.cs +++ b/src/ArcadeDotnet/Models/Tools/Formatted/FormattedListParams.cs @@ -1,4 +1,7 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text.Json; using ArcadeDotnet.Core; @@ -18,14 +21,19 @@ public string? Format { get { - if (!this.QueryProperties.TryGetValue("format", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("format", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["format"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["format"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -39,14 +47,19 @@ public long? Limit { get { - if (!this.QueryProperties.TryGetValue("limit", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("limit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["limit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["limit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -60,14 +73,19 @@ public long? Offset { get { - if (!this.QueryProperties.TryGetValue("offset", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("offset", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["offset"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["offset"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -81,14 +99,19 @@ public string? Toolkit { get { - if (!this.QueryProperties.TryGetValue("toolkit", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("toolkit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["toolkit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["toolkit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -102,32 +125,71 @@ public string? UserID { get { - if (!this.QueryProperties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("user_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["user_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public FormattedListParams() { } + + public FormattedListParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + FormattedListParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static FormattedListParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/formatted_tools") + return new UriBuilder(options.BaseUrl.ToString().TrimEnd('/') + "/v1/formatted_tools") { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledGetParams.cs b/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledGetParams.cs index 1ea0c20..35ce14e 100644 --- a/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledGetParams.cs +++ b/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledGetParams.cs @@ -1,5 +1,9 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; +using System.Text.Json; using ArcadeDotnet.Core; namespace ArcadeDotnet.Models.Tools.Scheduled; @@ -9,23 +13,57 @@ namespace ArcadeDotnet.Models.Tools.Scheduled; /// public sealed record class ScheduledGetParams : ParamsBase { - public required string ID; + public string? ID { get; init; } - public override Uri Url(IArcadeClient client) + public ScheduledGetParams() { } + + public ScheduledGetParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ScheduledGetParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static ScheduledGetParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { return new UriBuilder( - client.BaseUrl.ToString().TrimEnd('/') + options.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/scheduled_tools/{0}", this.ID) ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledGetResponse.cs b/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledGetResponse.cs index 6acd19d..7af8bff 100644 --- a/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledGetResponse.cs +++ b/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledGetResponse.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -13,14 +14,19 @@ public string? ID { get { - if (!this.Properties.TryGetValue("id", out JsonElement element)) + if (!this._rawData.TryGetValue("id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -31,7 +37,7 @@ public List? Attempts { get { - if (!this.Properties.TryGetValue("attempts", out JsonElement element)) + if (!this._rawData.TryGetValue("attempts", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -39,9 +45,14 @@ public List? Attempts ModelBase.SerializerOptions ); } - set + init { - this.Properties["attempts"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["attempts"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -52,14 +63,19 @@ public string? CreatedAt { get { - if (!this.Properties.TryGetValue("created_at", out JsonElement element)) + if (!this._rawData.TryGetValue("created_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["created_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["created_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -70,14 +86,19 @@ public string? ExecutionStatus { get { - if (!this.Properties.TryGetValue("execution_status", out JsonElement element)) + if (!this._rawData.TryGetValue("execution_status", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["execution_status"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["execution_status"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -88,14 +109,19 @@ public string? ExecutionType { get { - if (!this.Properties.TryGetValue("execution_type", out JsonElement element)) + if (!this._rawData.TryGetValue("execution_type", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["execution_type"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["execution_type"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -106,14 +132,19 @@ public string? FinishedAt { get { - if (!this.Properties.TryGetValue("finished_at", out JsonElement element)) + if (!this._rawData.TryGetValue("finished_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["finished_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["finished_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -124,7 +155,7 @@ public Dictionary? Input { get { - if (!this.Properties.TryGetValue("input", out JsonElement element)) + if (!this._rawData.TryGetValue("input", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -132,9 +163,14 @@ public Dictionary? Input ModelBase.SerializerOptions ); } - set + init { - this.Properties["input"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["input"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -145,14 +181,19 @@ public string? RunAt { get { - if (!this.Properties.TryGetValue("run_at", out JsonElement element)) + if (!this._rawData.TryGetValue("run_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["run_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["run_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -163,14 +204,19 @@ public string? StartedAt { get { - if (!this.Properties.TryGetValue("started_at", out JsonElement element)) + if (!this._rawData.TryGetValue("started_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["started_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["started_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -181,14 +227,19 @@ public string? ToolName { get { - if (!this.Properties.TryGetValue("tool_name", out JsonElement element)) + if (!this._rawData.TryGetValue("tool_name", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["tool_name"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["tool_name"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -199,14 +250,19 @@ public string? ToolkitName { get { - if (!this.Properties.TryGetValue("toolkit_name", out JsonElement element)) + if (!this._rawData.TryGetValue("toolkit_name", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["toolkit_name"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["toolkit_name"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -217,14 +273,19 @@ public string? ToolkitVersion { get { - if (!this.Properties.TryGetValue("toolkit_version", out JsonElement element)) + if (!this._rawData.TryGetValue("toolkit_version", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["toolkit_version"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["toolkit_version"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -235,14 +296,19 @@ public string? UpdatedAt { get { - if (!this.Properties.TryGetValue("updated_at", out JsonElement element)) + if (!this._rawData.TryGetValue("updated_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["updated_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["updated_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -253,14 +319,19 @@ public string? UserID { get { - if (!this.Properties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawData.TryGetValue("user_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["user_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -278,13 +349,7 @@ public override void Validate() _ = this.ExecutionStatus; _ = this.ExecutionType; _ = this.FinishedAt; - if (this.Input != null) - { - foreach (var item in this.Input.Values) - { - _ = item; - } - } + _ = this.Input; _ = this.RunAt; _ = this.StartedAt; _ = this.ToolName; @@ -296,16 +361,23 @@ public override void Validate() public ScheduledGetResponse() { } + public ScheduledGetResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - ScheduledGetResponse(Dictionary properties) + ScheduledGetResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static ScheduledGetResponse FromRawUnchecked(Dictionary properties) + public static ScheduledGetResponse FromRawUnchecked( + IReadOnlyDictionary rawData + ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledListPageResponse.cs b/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledListPageResponse.cs index 5983a82..8a73be9 100644 --- a/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledListPageResponse.cs +++ b/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledListPageResponse.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -15,7 +16,7 @@ public List? Items { get { - if (!this.Properties.TryGetValue("items", out JsonElement element)) + if (!this._rawData.TryGetValue("items", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -23,9 +24,14 @@ public List? Items ModelBase.SerializerOptions ); } - set + init { - this.Properties["items"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["items"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -36,14 +42,19 @@ public long? Limit { get { - if (!this.Properties.TryGetValue("limit", out JsonElement element)) + if (!this._rawData.TryGetValue("limit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["limit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["limit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -54,14 +65,19 @@ public long? Offset { get { - if (!this.Properties.TryGetValue("offset", out JsonElement element)) + if (!this._rawData.TryGetValue("offset", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["offset"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["offset"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -72,14 +88,19 @@ public long? PageCount { get { - if (!this.Properties.TryGetValue("page_count", out JsonElement element)) + if (!this._rawData.TryGetValue("page_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["page_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["page_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -90,14 +111,19 @@ public long? TotalCount { get { - if (!this.Properties.TryGetValue("total_count", out JsonElement element)) + if (!this._rawData.TryGetValue("total_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["total_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["total_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -118,18 +144,23 @@ public override void Validate() public ScheduledListPageResponse() { } + public ScheduledListPageResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - ScheduledListPageResponse(Dictionary properties) + ScheduledListPageResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 public static ScheduledListPageResponse FromRawUnchecked( - Dictionary properties + IReadOnlyDictionary rawData ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledListParams.cs b/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledListParams.cs index 8328a8e..a0b8a0d 100644 --- a/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledListParams.cs +++ b/src/ArcadeDotnet/Models/Tools/Scheduled/ScheduledListParams.cs @@ -1,4 +1,7 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text.Json; using ArcadeDotnet.Core; @@ -17,14 +20,19 @@ public long? Limit { get { - if (!this.QueryProperties.TryGetValue("limit", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("limit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["limit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["limit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -38,32 +46,71 @@ public long? Offset { get { - if (!this.QueryProperties.TryGetValue("offset", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("offset", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["offset"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["offset"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public ScheduledListParams() { } + + public ScheduledListParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ScheduledListParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static ScheduledListParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/scheduled_tools") + return new UriBuilder(options.BaseUrl.ToString().TrimEnd('/') + "/v1/scheduled_tools") { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Tools/ToolAuthorizeParams.cs b/src/ArcadeDotnet/Models/Tools/ToolAuthorizeParams.cs index 4e1adda..1387ed6 100644 --- a/src/ArcadeDotnet/Models/Tools/ToolAuthorizeParams.cs +++ b/src/ArcadeDotnet/Models/Tools/ToolAuthorizeParams.cs @@ -1,5 +1,7 @@ using System; +using System.Collections.Frozen; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text; using System.Text.Json; @@ -13,13 +15,17 @@ namespace ArcadeDotnet.Models.Tools; /// public sealed record class ToolAuthorizeParams : ParamsBase { - public Dictionary BodyProperties { get; set; } = []; + readonly FreezableDictionary _rawBodyData = []; + public IReadOnlyDictionary RawBodyData + { + get { return this._rawBodyData.Freeze(); } + } public required string ToolName { get { - if (!this.BodyProperties.TryGetValue("tool_name", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("tool_name", out JsonElement element)) throw new ArcadeInvalidDataException( "'tool_name' cannot be null", new ArgumentOutOfRangeException("tool_name", "Missing required argument") @@ -31,9 +37,9 @@ public required string ToolName new ArgumentNullException("tool_name") ); } - set + init { - this.BodyProperties["tool_name"] = JsonSerializer.SerializeToElement( + this._rawBodyData["tool_name"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -47,14 +53,19 @@ public string? NextUri { get { - if (!this.BodyProperties.TryGetValue("next_uri", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("next_uri", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["next_uri"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["next_uri"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -68,14 +79,19 @@ public string? ToolVersion { get { - if (!this.BodyProperties.TryGetValue("tool_version", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("tool_version", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["tool_version"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["tool_version"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -89,41 +105,82 @@ public string? UserID { get { - if (!this.BodyProperties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("user_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["user_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public ToolAuthorizeParams() { } + + public ToolAuthorizeParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/tools/authorize") + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ToolAuthorizeParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData, + FrozenDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } +#pragma warning restore CS8618 + + public static ToolAuthorizeParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData), + FrozenDictionary.ToFrozenDictionary(rawBodyData) + ); + } + + public override Uri Url(ClientOptions options) + { + return new UriBuilder(options.BaseUrl.ToString().TrimEnd('/') + "/v1/tools/authorize") { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } internal override StringContent? BodyContent() { - return new( - JsonSerializer.Serialize(this.BodyProperties), - Encoding.UTF8, - "application/json" - ); + return new(JsonSerializer.Serialize(this.RawBodyData), Encoding.UTF8, "application/json"); } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Tools/ToolDefinition.cs b/src/ArcadeDotnet/Models/Tools/ToolDefinition.cs index 43a97c1..0776470 100644 --- a/src/ArcadeDotnet/Models/Tools/ToolDefinition.cs +++ b/src/ArcadeDotnet/Models/Tools/ToolDefinition.cs @@ -1,11 +1,11 @@ -using System; +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using ArcadeDotnet.Core; using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Tools.ToolDefinitionProperties; +using System = System; namespace ArcadeDotnet.Models.Tools; @@ -16,10 +16,10 @@ public required string FullyQualifiedName { get { - if (!this.Properties.TryGetValue("fully_qualified_name", out JsonElement element)) + if (!this._rawData.TryGetValue("fully_qualified_name", out JsonElement element)) throw new ArcadeInvalidDataException( "'fully_qualified_name' cannot be null", - new ArgumentOutOfRangeException( + new System::ArgumentOutOfRangeException( "fully_qualified_name", "Missing required argument" ) @@ -28,12 +28,12 @@ public required string FullyQualifiedName return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) ?? throw new ArcadeInvalidDataException( "'fully_qualified_name' cannot be null", - new ArgumentNullException("fully_qualified_name") + new System::ArgumentNullException("fully_qualified_name") ); } - set + init { - this.Properties["fully_qualified_name"] = JsonSerializer.SerializeToElement( + this._rawData["fully_qualified_name"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -44,21 +44,21 @@ public required Input Input { get { - if (!this.Properties.TryGetValue("input", out JsonElement element)) + if (!this._rawData.TryGetValue("input", out JsonElement element)) throw new ArcadeInvalidDataException( "'input' cannot be null", - new ArgumentOutOfRangeException("input", "Missing required argument") + new System::ArgumentOutOfRangeException("input", "Missing required argument") ); return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) ?? throw new ArcadeInvalidDataException( "'input' cannot be null", - new ArgumentNullException("input") + new System::ArgumentNullException("input") ); } - set + init { - this.Properties["input"] = JsonSerializer.SerializeToElement( + this._rawData["input"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -69,21 +69,21 @@ public required string Name { get { - if (!this.Properties.TryGetValue("name", out JsonElement element)) + if (!this._rawData.TryGetValue("name", out JsonElement element)) throw new ArcadeInvalidDataException( "'name' cannot be null", - new ArgumentOutOfRangeException("name", "Missing required argument") + new System::ArgumentOutOfRangeException("name", "Missing required argument") ); return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) ?? throw new ArcadeInvalidDataException( "'name' cannot be null", - new ArgumentNullException("name") + new System::ArgumentNullException("name") ); } - set + init { - this.Properties["name"] = JsonSerializer.SerializeToElement( + this._rawData["name"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -94,21 +94,24 @@ public required string QualifiedName { get { - if (!this.Properties.TryGetValue("qualified_name", out JsonElement element)) + if (!this._rawData.TryGetValue("qualified_name", out JsonElement element)) throw new ArcadeInvalidDataException( "'qualified_name' cannot be null", - new ArgumentOutOfRangeException("qualified_name", "Missing required argument") + new System::ArgumentOutOfRangeException( + "qualified_name", + "Missing required argument" + ) ); return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) ?? throw new ArcadeInvalidDataException( "'qualified_name' cannot be null", - new ArgumentNullException("qualified_name") + new System::ArgumentNullException("qualified_name") ); } - set + init { - this.Properties["qualified_name"] = JsonSerializer.SerializeToElement( + this._rawData["qualified_name"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -119,21 +122,21 @@ public required Toolkit Toolkit { get { - if (!this.Properties.TryGetValue("toolkit", out JsonElement element)) + if (!this._rawData.TryGetValue("toolkit", out JsonElement element)) throw new ArcadeInvalidDataException( "'toolkit' cannot be null", - new ArgumentOutOfRangeException("toolkit", "Missing required argument") + new System::ArgumentOutOfRangeException("toolkit", "Missing required argument") ); return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) ?? throw new ArcadeInvalidDataException( "'toolkit' cannot be null", - new ArgumentNullException("toolkit") + new System::ArgumentNullException("toolkit") ); } - set + init { - this.Properties["toolkit"] = JsonSerializer.SerializeToElement( + this._rawData["toolkit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -144,14 +147,19 @@ public string? Description { get { - if (!this.Properties.TryGetValue("description", out JsonElement element)) + if (!this._rawData.TryGetValue("description", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["description"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["description"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -162,7 +170,7 @@ public Dictionary? FormattedSchema { get { - if (!this.Properties.TryGetValue("formatted_schema", out JsonElement element)) + if (!this._rawData.TryGetValue("formatted_schema", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -170,27 +178,40 @@ public Dictionary? FormattedSchema ModelBase.SerializerOptions ); } - set + init { - this.Properties["formatted_schema"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["formatted_schema"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public Output? Output + public ToolDefinitionOutput? Output { get { - if (!this.Properties.TryGetValue("output", out JsonElement element)) + if (!this._rawData.TryGetValue("output", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); } - set + init { - this.Properties["output"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["output"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -201,14 +222,19 @@ public Requirements? Requirements { get { - if (!this.Properties.TryGetValue("requirements", out JsonElement element)) + if (!this._rawData.TryGetValue("requirements", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["requirements"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["requirements"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -223,29 +249,1012 @@ public override void Validate() _ = this.QualifiedName; this.Toolkit.Validate(); _ = this.Description; - if (this.FormattedSchema != null) + _ = this.FormattedSchema; + this.Output?.Validate(); + this.Requirements?.Validate(); + } + + public ToolDefinition() { } + + public ToolDefinition(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ToolDefinition(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static ToolDefinition FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Input : ModelBase, IFromRaw +{ + public List? Parameters + { + get + { + if (!this._rawData.TryGetValue("parameters", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init { - foreach (var item in this.FormattedSchema.Values) + if (value == null) { - _ = item; + return; } + + this._rawData["parameters"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); } - this.Output?.Validate(); - this.Requirements?.Validate(); } - public ToolDefinition() { } + public override void Validate() + { + foreach (var item in this.Parameters ?? []) + { + item.Validate(); + } + } + + public Input() { } + + public Input(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Input(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Input FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Parameter : ModelBase, IFromRaw +{ + public required string Name + { + get + { + if (!this._rawData.TryGetValue("name", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'name' cannot be null", + new System::ArgumentOutOfRangeException("name", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'name' cannot be null", + new System::ArgumentNullException("name") + ); + } + init + { + this._rawData["name"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required ValueSchema ValueSchema + { + get + { + if (!this._rawData.TryGetValue("value_schema", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'value_schema' cannot be null", + new System::ArgumentOutOfRangeException( + "value_schema", + "Missing required argument" + ) + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'value_schema' cannot be null", + new System::ArgumentNullException("value_schema") + ); + } + init + { + this._rawData["value_schema"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Description + { + get + { + if (!this._rawData.TryGetValue("description", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["description"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Inferrable + { + get + { + if (!this._rawData.TryGetValue("inferrable", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["inferrable"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Required + { + get + { + if (!this._rawData.TryGetValue("required", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["required"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Name; + this.ValueSchema.Validate(); + _ = this.Description; + _ = this.Inferrable; + _ = this.Required; + } + + public Parameter() { } + + public Parameter(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Parameter(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Parameter FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Toolkit : ModelBase, IFromRaw +{ + public required string Name + { + get + { + if (!this._rawData.TryGetValue("name", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'name' cannot be null", + new System::ArgumentOutOfRangeException("name", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'name' cannot be null", + new System::ArgumentNullException("name") + ); + } + init + { + this._rawData["name"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Description + { + get + { + if (!this._rawData.TryGetValue("description", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["description"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Version + { + get + { + if (!this._rawData.TryGetValue("version", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["version"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Name; + _ = this.Description; + _ = this.Version; + } + + public Toolkit() { } + + public Toolkit(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } #pragma warning disable CS8618 [SetsRequiredMembers] - ToolDefinition(Dictionary properties) + Toolkit(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static ToolDefinition FromRawUnchecked(Dictionary properties) + public static Toolkit FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } + + [SetsRequiredMembers] + public Toolkit(string name) + : this() + { + this.Name = name; + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class ToolDefinitionOutput : ModelBase, IFromRaw +{ + public List? AvailableModes + { + get + { + if (!this._rawData.TryGetValue("available_modes", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["available_modes"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Description + { + get + { + if (!this._rawData.TryGetValue("description", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["description"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ValueSchema? ValueSchema + { + get + { + if (!this._rawData.TryGetValue("value_schema", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["value_schema"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AvailableModes; + _ = this.Description; + this.ValueSchema?.Validate(); + } + + public ToolDefinitionOutput() { } + + public ToolDefinitionOutput(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ToolDefinitionOutput(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static ToolDefinitionOutput FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Requirements : ModelBase, IFromRaw +{ + public Authorization? Authorization + { + get + { + if (!this._rawData.TryGetValue("authorization", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["authorization"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Met + { + get + { + if (!this._rawData.TryGetValue("met", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["met"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public List? Secrets + { + get + { + if (!this._rawData.TryGetValue("secrets", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["secrets"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + this.Authorization?.Validate(); + _ = this.Met; + foreach (var item in this.Secrets ?? []) + { + item.Validate(); + } + } + + public Requirements() { } + + public Requirements(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Requirements(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Requirements FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Authorization : ModelBase, IFromRaw +{ + public string? ID + { + get + { + if (!this._rawData.TryGetValue("id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Oauth2? Oauth2 + { + get + { + if (!this._rawData.TryGetValue("oauth2", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["oauth2"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ProviderID + { + get + { + if (!this._rawData.TryGetValue("provider_id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["provider_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ProviderType + { + get + { + if (!this._rawData.TryGetValue("provider_type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["provider_type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? Status + { + get + { + if (!this._rawData.TryGetValue("status", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["status"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? StatusReason + { + get + { + if (!this._rawData.TryGetValue("status_reason", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["status_reason"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? TokenStatus + { + get + { + if (!this._rawData.TryGetValue("token_status", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["token_status"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.ID; + this.Oauth2?.Validate(); + _ = this.ProviderID; + _ = this.ProviderType; + this.Status?.Validate(); + _ = this.StatusReason; + this.TokenStatus?.Validate(); + } + + public Authorization() { } + + public Authorization(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Authorization(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Authorization FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Oauth2 : ModelBase, IFromRaw +{ + public List? Scopes + { + get + { + if (!this._rawData.TryGetValue("scopes", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["scopes"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Scopes; + } + + public Oauth2() { } + + public Oauth2(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Oauth2(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Oauth2 FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(global::ArcadeDotnet.Models.Tools.StatusConverter))] +public enum Status +{ + Active, + Inactive, +} + +sealed class StatusConverter : JsonConverter +{ + public override global::ArcadeDotnet.Models.Tools.Status Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "active" => global::ArcadeDotnet.Models.Tools.Status.Active, + "inactive" => global::ArcadeDotnet.Models.Tools.Status.Inactive, + _ => (global::ArcadeDotnet.Models.Tools.Status)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + global::ArcadeDotnet.Models.Tools.Status value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + global::ArcadeDotnet.Models.Tools.Status.Active => "active", + global::ArcadeDotnet.Models.Tools.Status.Inactive => "inactive", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(TokenStatusConverter))] +public enum TokenStatus +{ + NotStarted, + Pending, + Completed, + Failed, +} + +sealed class TokenStatusConverter : JsonConverter +{ + public override TokenStatus Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "not_started" => TokenStatus.NotStarted, + "pending" => TokenStatus.Pending, + "completed" => TokenStatus.Completed, + "failed" => TokenStatus.Failed, + _ => (TokenStatus)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + TokenStatus value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + TokenStatus.NotStarted => "not_started", + TokenStatus.Pending => "pending", + TokenStatus.Completed => "completed", + TokenStatus.Failed => "failed", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Secret : ModelBase, IFromRaw +{ + public required string Key + { + get + { + if (!this._rawData.TryGetValue("key", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'key' cannot be null", + new System::ArgumentOutOfRangeException("key", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'key' cannot be null", + new System::ArgumentNullException("key") + ); + } + init + { + this._rawData["key"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Met + { + get + { + if (!this._rawData.TryGetValue("met", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["met"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? StatusReason + { + get + { + if (!this._rawData.TryGetValue("status_reason", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["status_reason"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Key; + _ = this.Met; + _ = this.StatusReason; + } + + public Secret() { } + + public Secret(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Secret(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Secret FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } + + [SetsRequiredMembers] + public Secret(string key) + : this() { - return new(properties); + this.Key = key; } } diff --git a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/Input.cs b/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/Input.cs deleted file mode 100644 index 83c3c1c..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/Input.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Tools.ToolDefinitionProperties.InputProperties; - -namespace ArcadeDotnet.Models.Tools.ToolDefinitionProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Input : ModelBase, IFromRaw -{ - public List? Parameters - { - get - { - if (!this.Properties.TryGetValue("parameters", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["parameters"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - foreach (var item in this.Parameters ?? []) - { - item.Validate(); - } - } - - public Input() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Input(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Input FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/InputProperties/Parameter.cs b/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/InputProperties/Parameter.cs deleted file mode 100644 index 0716355..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/InputProperties/Parameter.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Tools.ToolDefinitionProperties.InputProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Parameter : ModelBase, IFromRaw -{ - public required string Name - { - get - { - if (!this.Properties.TryGetValue("name", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'name' cannot be null", - new ArgumentOutOfRangeException("name", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'name' cannot be null", - new ArgumentNullException("name") - ); - } - set - { - this.Properties["name"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required ValueSchema ValueSchema - { - get - { - if (!this.Properties.TryGetValue("value_schema", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'value_schema' cannot be null", - new ArgumentOutOfRangeException("value_schema", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'value_schema' cannot be null", - new ArgumentNullException("value_schema") - ); - } - set - { - this.Properties["value_schema"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Description - { - get - { - if (!this.Properties.TryGetValue("description", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["description"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Inferrable - { - get - { - if (!this.Properties.TryGetValue("inferrable", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["inferrable"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Required - { - get - { - if (!this.Properties.TryGetValue("required", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["required"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Name; - this.ValueSchema.Validate(); - _ = this.Description; - _ = this.Inferrable; - _ = this.Required; - } - - public Parameter() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Parameter(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Parameter FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/Output.cs b/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/Output.cs deleted file mode 100644 index 87f2af4..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/Output.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Tools.ToolDefinitionProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Output : ModelBase, IFromRaw -{ - public List? AvailableModes - { - get - { - if (!this.Properties.TryGetValue("available_modes", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["available_modes"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Description - { - get - { - if (!this.Properties.TryGetValue("description", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["description"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ValueSchema? ValueSchema - { - get - { - if (!this.Properties.TryGetValue("value_schema", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["value_schema"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - foreach (var item in this.AvailableModes ?? []) - { - _ = item; - } - _ = this.Description; - this.ValueSchema?.Validate(); - } - - public Output() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Output(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Output FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/Requirements.cs b/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/Requirements.cs deleted file mode 100644 index ce09afb..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/Requirements.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Tools.ToolDefinitionProperties.RequirementsProperties; - -namespace ArcadeDotnet.Models.Tools.ToolDefinitionProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Requirements : ModelBase, IFromRaw -{ - public Authorization? Authorization - { - get - { - if (!this.Properties.TryGetValue("authorization", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["authorization"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Met - { - get - { - if (!this.Properties.TryGetValue("met", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["met"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public List? Secrets - { - get - { - if (!this.Properties.TryGetValue("secrets", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["secrets"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - this.Authorization?.Validate(); - _ = this.Met; - foreach (var item in this.Secrets ?? []) - { - item.Validate(); - } - } - - public Requirements() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Requirements(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Requirements FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/Authorization.cs b/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/Authorization.cs deleted file mode 100644 index 80ee4d7..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/Authorization.cs +++ /dev/null @@ -1,170 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Tools.ToolDefinitionProperties.RequirementsProperties.AuthorizationProperties; - -namespace ArcadeDotnet.Models.Tools.ToolDefinitionProperties.RequirementsProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Authorization : ModelBase, IFromRaw -{ - public string? ID - { - get - { - if (!this.Properties.TryGetValue("id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Oauth2? Oauth2 - { - get - { - if (!this.Properties.TryGetValue("oauth2", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["oauth2"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ProviderID - { - get - { - if (!this.Properties.TryGetValue("provider_id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["provider_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ProviderType - { - get - { - if (!this.Properties.TryGetValue("provider_type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["provider_type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? Status - { - get - { - if (!this.Properties.TryGetValue("status", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["status"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? StatusReason - { - get - { - if (!this.Properties.TryGetValue("status_reason", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["status_reason"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? TokenStatus - { - get - { - if (!this.Properties.TryGetValue("token_status", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["token_status"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.ID; - this.Oauth2?.Validate(); - _ = this.ProviderID; - _ = this.ProviderType; - this.Status?.Validate(); - _ = this.StatusReason; - this.TokenStatus?.Validate(); - } - - public Authorization() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Authorization(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Authorization FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/AuthorizationProperties/Oauth2.cs b/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/AuthorizationProperties/Oauth2.cs deleted file mode 100644 index 66bc094..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/AuthorizationProperties/Oauth2.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Tools.ToolDefinitionProperties.RequirementsProperties.AuthorizationProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Oauth2 : ModelBase, IFromRaw -{ - public List? Scopes - { - get - { - if (!this.Properties.TryGetValue("scopes", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["scopes"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - foreach (var item in this.Scopes ?? []) - { - _ = item; - } - } - - public Oauth2() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Oauth2(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Oauth2 FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/AuthorizationProperties/Status.cs b/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/AuthorizationProperties/Status.cs deleted file mode 100644 index 8f8d8a1..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/AuthorizationProperties/Status.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Tools.ToolDefinitionProperties.RequirementsProperties.AuthorizationProperties; - -[JsonConverter(typeof(StatusConverter))] -public enum Status -{ - Active, - Inactive, -} - -sealed class StatusConverter : JsonConverter -{ - public override Status Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "active" => Status.Active, - "inactive" => Status.Inactive, - _ => (Status)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Status value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - Status.Active => "active", - Status.Inactive => "inactive", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/AuthorizationProperties/TokenStatus.cs b/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/AuthorizationProperties/TokenStatus.cs deleted file mode 100644 index 39e4a29..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/AuthorizationProperties/TokenStatus.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Tools.ToolDefinitionProperties.RequirementsProperties.AuthorizationProperties; - -[JsonConverter(typeof(TokenStatusConverter))] -public enum TokenStatus -{ - NotStarted, - Pending, - Completed, - Failed, -} - -sealed class TokenStatusConverter : JsonConverter -{ - public override TokenStatus Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "not_started" => TokenStatus.NotStarted, - "pending" => TokenStatus.Pending, - "completed" => TokenStatus.Completed, - "failed" => TokenStatus.Failed, - _ => (TokenStatus)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - TokenStatus value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - TokenStatus.NotStarted => "not_started", - TokenStatus.Pending => "pending", - TokenStatus.Completed => "completed", - TokenStatus.Failed => "failed", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/Secret.cs b/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/Secret.cs deleted file mode 100644 index b69892d..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/RequirementsProperties/Secret.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Tools.ToolDefinitionProperties.RequirementsProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Secret : ModelBase, IFromRaw -{ - public required string Key - { - get - { - if (!this.Properties.TryGetValue("key", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'key' cannot be null", - new ArgumentOutOfRangeException("key", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'key' cannot be null", - new ArgumentNullException("key") - ); - } - set - { - this.Properties["key"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Met - { - get - { - if (!this.Properties.TryGetValue("met", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["met"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? StatusReason - { - get - { - if (!this.Properties.TryGetValue("status_reason", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["status_reason"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Key; - _ = this.Met; - _ = this.StatusReason; - } - - public Secret() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Secret(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Secret FromRawUnchecked(Dictionary properties) - { - return new(properties); - } - - [SetsRequiredMembers] - public Secret(string key) - : this() - { - this.Key = key; - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/Toolkit.cs b/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/Toolkit.cs deleted file mode 100644 index cd18f1b..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolDefinitionProperties/Toolkit.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Tools.ToolDefinitionProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Toolkit : ModelBase, IFromRaw -{ - public required string Name - { - get - { - if (!this.Properties.TryGetValue("name", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'name' cannot be null", - new ArgumentOutOfRangeException("name", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'name' cannot be null", - new ArgumentNullException("name") - ); - } - set - { - this.Properties["name"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Description - { - get - { - if (!this.Properties.TryGetValue("description", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["description"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Version - { - get - { - if (!this.Properties.TryGetValue("version", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["version"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Name; - _ = this.Description; - _ = this.Version; - } - - public Toolkit() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Toolkit(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Toolkit FromRawUnchecked(Dictionary properties) - { - return new(properties); - } - - [SetsRequiredMembers] - public Toolkit(string name) - : this() - { - this.Name = name; - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolExecuteParams.cs b/src/ArcadeDotnet/Models/Tools/ToolExecuteParams.cs index 1de6b09..28fe0ec 100644 --- a/src/ArcadeDotnet/Models/Tools/ToolExecuteParams.cs +++ b/src/ArcadeDotnet/Models/Tools/ToolExecuteParams.cs @@ -1,5 +1,7 @@ using System; +using System.Collections.Frozen; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text; using System.Text.Json; @@ -13,13 +15,17 @@ namespace ArcadeDotnet.Models.Tools; /// public sealed record class ToolExecuteParams : ParamsBase { - public Dictionary BodyProperties { get; set; } = []; + readonly FreezableDictionary _rawBodyData = []; + public IReadOnlyDictionary RawBodyData + { + get { return this._rawBodyData.Freeze(); } + } public required string ToolName { get { - if (!this.BodyProperties.TryGetValue("tool_name", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("tool_name", out JsonElement element)) throw new ArcadeInvalidDataException( "'tool_name' cannot be null", new ArgumentOutOfRangeException("tool_name", "Missing required argument") @@ -31,9 +37,9 @@ public required string ToolName new ArgumentNullException("tool_name") ); } - set + init { - this.BodyProperties["tool_name"] = JsonSerializer.SerializeToElement( + this._rawBodyData["tool_name"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -48,19 +54,19 @@ public bool? IncludeErrorStacktrace { get { - if ( - !this.BodyProperties.TryGetValue( - "include_error_stacktrace", - out JsonElement element - ) - ) + if (!this._rawBodyData.TryGetValue("include_error_stacktrace", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["include_error_stacktrace"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["include_error_stacktrace"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -74,7 +80,7 @@ public Dictionary? Input { get { - if (!this.BodyProperties.TryGetValue("input", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("input", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -82,9 +88,14 @@ public Dictionary? Input ModelBase.SerializerOptions ); } - set + init { - this.BodyProperties["input"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["input"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -99,14 +110,19 @@ public string? RunAt { get { - if (!this.BodyProperties.TryGetValue("run_at", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("run_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["run_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["run_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -120,14 +136,19 @@ public string? ToolVersion { get { - if (!this.BodyProperties.TryGetValue("tool_version", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("tool_version", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["tool_version"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["tool_version"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -138,41 +159,82 @@ public string? UserID { get { - if (!this.BodyProperties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("user_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["user_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public ToolExecuteParams() { } + + public ToolExecuteParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ToolExecuteParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData, + FrozenDictionary rawBodyData + ) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/tools/execute") + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } +#pragma warning restore CS8618 + + public static ToolExecuteParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData), + FrozenDictionary.ToFrozenDictionary(rawBodyData) + ); + } + + public override Uri Url(ClientOptions options) + { + return new UriBuilder(options.BaseUrl.ToString().TrimEnd('/') + "/v1/tools/execute") { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } internal override StringContent? BodyContent() { - return new( - JsonSerializer.Serialize(this.BodyProperties), - Encoding.UTF8, - "application/json" - ); + return new(JsonSerializer.Serialize(this.RawBodyData), Encoding.UTF8, "application/json"); } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Tools/ToolExecution.cs b/src/ArcadeDotnet/Models/Tools/ToolExecution.cs index 53eb98b..93e8625 100644 --- a/src/ArcadeDotnet/Models/Tools/ToolExecution.cs +++ b/src/ArcadeDotnet/Models/Tools/ToolExecution.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -13,14 +14,19 @@ public string? ID { get { - if (!this.Properties.TryGetValue("id", out JsonElement element)) + if (!this._rawData.TryGetValue("id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -31,14 +37,19 @@ public string? CreatedAt { get { - if (!this.Properties.TryGetValue("created_at", out JsonElement element)) + if (!this._rawData.TryGetValue("created_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["created_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["created_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -49,14 +60,19 @@ public string? ExecutionStatus { get { - if (!this.Properties.TryGetValue("execution_status", out JsonElement element)) + if (!this._rawData.TryGetValue("execution_status", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["execution_status"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["execution_status"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -67,14 +83,19 @@ public string? ExecutionType { get { - if (!this.Properties.TryGetValue("execution_type", out JsonElement element)) + if (!this._rawData.TryGetValue("execution_type", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["execution_type"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["execution_type"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -85,14 +106,19 @@ public string? FinishedAt { get { - if (!this.Properties.TryGetValue("finished_at", out JsonElement element)) + if (!this._rawData.TryGetValue("finished_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["finished_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["finished_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -103,14 +129,19 @@ public string? RunAt { get { - if (!this.Properties.TryGetValue("run_at", out JsonElement element)) + if (!this._rawData.TryGetValue("run_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["run_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["run_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -121,14 +152,19 @@ public string? StartedAt { get { - if (!this.Properties.TryGetValue("started_at", out JsonElement element)) + if (!this._rawData.TryGetValue("started_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["started_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["started_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -139,14 +175,19 @@ public string? ToolName { get { - if (!this.Properties.TryGetValue("tool_name", out JsonElement element)) + if (!this._rawData.TryGetValue("tool_name", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["tool_name"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["tool_name"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -157,14 +198,19 @@ public string? ToolkitName { get { - if (!this.Properties.TryGetValue("toolkit_name", out JsonElement element)) + if (!this._rawData.TryGetValue("toolkit_name", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["toolkit_name"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["toolkit_name"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -175,14 +221,19 @@ public string? ToolkitVersion { get { - if (!this.Properties.TryGetValue("toolkit_version", out JsonElement element)) + if (!this._rawData.TryGetValue("toolkit_version", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["toolkit_version"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["toolkit_version"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -193,14 +244,19 @@ public string? UpdatedAt { get { - if (!this.Properties.TryGetValue("updated_at", out JsonElement element)) + if (!this._rawData.TryGetValue("updated_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["updated_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["updated_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -211,14 +267,19 @@ public string? UserID { get { - if (!this.Properties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawData.TryGetValue("user_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["user_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -243,16 +304,21 @@ public override void Validate() public ToolExecution() { } + public ToolExecution(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - ToolExecution(Dictionary properties) + ToolExecution(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static ToolExecution FromRawUnchecked(Dictionary properties) + public static ToolExecution FromRawUnchecked(IReadOnlyDictionary rawData) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Tools/ToolExecutionAttempt.cs b/src/ArcadeDotnet/Models/Tools/ToolExecutionAttempt.cs index 53244b5..5a116f0 100644 --- a/src/ArcadeDotnet/Models/Tools/ToolExecutionAttempt.cs +++ b/src/ArcadeDotnet/Models/Tools/ToolExecutionAttempt.cs @@ -1,9 +1,11 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Tools.ToolExecutionAttemptProperties; +using ArcadeDotnet.Exceptions; +using System = System; namespace ArcadeDotnet.Models.Tools; @@ -14,14 +16,19 @@ public string? ID { get { - if (!this.Properties.TryGetValue("id", out JsonElement element)) + if (!this._rawData.TryGetValue("id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -32,32 +39,45 @@ public string? FinishedAt { get { - if (!this.Properties.TryGetValue("finished_at", out JsonElement element)) + if (!this._rawData.TryGetValue("finished_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["finished_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["finished_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public Output? Output + public ToolExecutionAttemptOutput? Output { get { - if (!this.Properties.TryGetValue("output", out JsonElement element)) + if (!this._rawData.TryGetValue("output", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); } - set + init { - this.Properties["output"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["output"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -68,14 +88,19 @@ public string? StartedAt { get { - if (!this.Properties.TryGetValue("started_at", out JsonElement element)) + if (!this._rawData.TryGetValue("started_at", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["started_at"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["started_at"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -86,14 +111,19 @@ public bool? Success { get { - if (!this.Properties.TryGetValue("success", out JsonElement element)) + if (!this._rawData.TryGetValue("success", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["success"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["success"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -104,14 +134,19 @@ public string? SystemErrorMessage { get { - if (!this.Properties.TryGetValue("system_error_message", out JsonElement element)) + if (!this._rawData.TryGetValue("system_error_message", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["system_error_message"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["system_error_message"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -130,16 +165,643 @@ public override void Validate() public ToolExecutionAttempt() { } + public ToolExecutionAttempt(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ToolExecutionAttempt(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static ToolExecutionAttempt FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class ToolExecutionAttemptOutput + : ModelBase, + IFromRaw +{ + public AuthorizationResponse? Authorization + { + get + { + if (!this._rawData.TryGetValue("authorization", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["authorization"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ToolExecutionAttemptOutputError? Error + { + get + { + if (!this._rawData.TryGetValue("error", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["error"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public List? Logs + { + get + { + if (!this._rawData.TryGetValue("logs", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["logs"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public JsonElement? Value + { + get + { + if (!this._rawData.TryGetValue("value", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["value"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + this.Authorization?.Validate(); + this.Error?.Validate(); + foreach (var item in this.Logs ?? []) + { + item.Validate(); + } + _ = this.Value; + } + + public ToolExecutionAttemptOutput() { } + + public ToolExecutionAttemptOutput(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ToolExecutionAttemptOutput(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static ToolExecutionAttemptOutput FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class ToolExecutionAttemptOutputError + : ModelBase, + IFromRaw +{ + public required bool CanRetry + { + get + { + if (!this._rawData.TryGetValue("can_retry", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'can_retry' cannot be null", + new System::ArgumentOutOfRangeException( + "can_retry", + "Missing required argument" + ) + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + this._rawData["can_retry"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required ApiEnum Kind + { + get + { + if (!this._rawData.TryGetValue("kind", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'kind' cannot be null", + new System::ArgumentOutOfRangeException("kind", "Missing required argument") + ); + + return JsonSerializer.Deserialize>( + element, + ModelBase.SerializerOptions + ); + } + init + { + this._rawData["kind"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required string Message + { + get + { + if (!this._rawData.TryGetValue("message", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'message' cannot be null", + new System::ArgumentOutOfRangeException("message", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'message' cannot be null", + new System::ArgumentNullException("message") + ); + } + init + { + this._rawData["message"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? AdditionalPromptContent + { + get + { + if (!this._rawData.TryGetValue("additional_prompt_content", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["additional_prompt_content"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? DeveloperMessage + { + get + { + if (!this._rawData.TryGetValue("developer_message", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["developer_message"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Extra + { + get + { + if (!this._rawData.TryGetValue("extra", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["extra"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public long? RetryAfterMs + { + get + { + if (!this._rawData.TryGetValue("retry_after_ms", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["retry_after_ms"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Stacktrace + { + get + { + if (!this._rawData.TryGetValue("stacktrace", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["stacktrace"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public long? StatusCode + { + get + { + if (!this._rawData.TryGetValue("status_code", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["status_code"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.CanRetry; + this.Kind.Validate(); + _ = this.Message; + _ = this.AdditionalPromptContent; + _ = this.DeveloperMessage; + _ = this.Extra; + _ = this.RetryAfterMs; + _ = this.Stacktrace; + _ = this.StatusCode; + } + + public ToolExecutionAttemptOutputError() { } + + public ToolExecutionAttemptOutputError(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ToolExecutionAttemptOutputError(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static ToolExecutionAttemptOutputError FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ToolExecutionAttemptOutputErrorKindConverter))] +public enum ToolExecutionAttemptOutputErrorKind +{ + ToolkitLoadFailed, + ToolDefinitionBadDefinition, + ToolDefinitionBadInputSchema, + ToolDefinitionBadOutputSchema, + ToolRequirementsNotMet, + ToolRuntimeBadInputValue, + ToolRuntimeBadOutputValue, + ToolRuntimeRetry, + ToolRuntimeContextRequired, + ToolRuntimeFatal, + UpstreamRuntimeBadRequest, + UpstreamRuntimeAuthError, + UpstreamRuntimeNotFound, + UpstreamRuntimeValidationError, + UpstreamRuntimeRateLimit, + UpstreamRuntimeServerError, + UpstreamRuntimeUnmapped, + Unknown, +} + +sealed class ToolExecutionAttemptOutputErrorKindConverter + : JsonConverter +{ + public override ToolExecutionAttemptOutputErrorKind Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "TOOLKIT_LOAD_FAILED" => ToolExecutionAttemptOutputErrorKind.ToolkitLoadFailed, + "TOOL_DEFINITION_BAD_DEFINITION" => + ToolExecutionAttemptOutputErrorKind.ToolDefinitionBadDefinition, + "TOOL_DEFINITION_BAD_INPUT_SCHEMA" => + ToolExecutionAttemptOutputErrorKind.ToolDefinitionBadInputSchema, + "TOOL_DEFINITION_BAD_OUTPUT_SCHEMA" => + ToolExecutionAttemptOutputErrorKind.ToolDefinitionBadOutputSchema, + "TOOL_REQUIREMENTS_NOT_MET" => + ToolExecutionAttemptOutputErrorKind.ToolRequirementsNotMet, + "TOOL_RUNTIME_BAD_INPUT_VALUE" => + ToolExecutionAttemptOutputErrorKind.ToolRuntimeBadInputValue, + "TOOL_RUNTIME_BAD_OUTPUT_VALUE" => + ToolExecutionAttemptOutputErrorKind.ToolRuntimeBadOutputValue, + "TOOL_RUNTIME_RETRY" => ToolExecutionAttemptOutputErrorKind.ToolRuntimeRetry, + "TOOL_RUNTIME_CONTEXT_REQUIRED" => + ToolExecutionAttemptOutputErrorKind.ToolRuntimeContextRequired, + "TOOL_RUNTIME_FATAL" => ToolExecutionAttemptOutputErrorKind.ToolRuntimeFatal, + "UPSTREAM_RUNTIME_BAD_REQUEST" => + ToolExecutionAttemptOutputErrorKind.UpstreamRuntimeBadRequest, + "UPSTREAM_RUNTIME_AUTH_ERROR" => + ToolExecutionAttemptOutputErrorKind.UpstreamRuntimeAuthError, + "UPSTREAM_RUNTIME_NOT_FOUND" => + ToolExecutionAttemptOutputErrorKind.UpstreamRuntimeNotFound, + "UPSTREAM_RUNTIME_VALIDATION_ERROR" => + ToolExecutionAttemptOutputErrorKind.UpstreamRuntimeValidationError, + "UPSTREAM_RUNTIME_RATE_LIMIT" => + ToolExecutionAttemptOutputErrorKind.UpstreamRuntimeRateLimit, + "UPSTREAM_RUNTIME_SERVER_ERROR" => + ToolExecutionAttemptOutputErrorKind.UpstreamRuntimeServerError, + "UPSTREAM_RUNTIME_UNMAPPED" => + ToolExecutionAttemptOutputErrorKind.UpstreamRuntimeUnmapped, + "UNKNOWN" => ToolExecutionAttemptOutputErrorKind.Unknown, + _ => (ToolExecutionAttemptOutputErrorKind)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + ToolExecutionAttemptOutputErrorKind value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + ToolExecutionAttemptOutputErrorKind.ToolkitLoadFailed => "TOOLKIT_LOAD_FAILED", + ToolExecutionAttemptOutputErrorKind.ToolDefinitionBadDefinition => + "TOOL_DEFINITION_BAD_DEFINITION", + ToolExecutionAttemptOutputErrorKind.ToolDefinitionBadInputSchema => + "TOOL_DEFINITION_BAD_INPUT_SCHEMA", + ToolExecutionAttemptOutputErrorKind.ToolDefinitionBadOutputSchema => + "TOOL_DEFINITION_BAD_OUTPUT_SCHEMA", + ToolExecutionAttemptOutputErrorKind.ToolRequirementsNotMet => + "TOOL_REQUIREMENTS_NOT_MET", + ToolExecutionAttemptOutputErrorKind.ToolRuntimeBadInputValue => + "TOOL_RUNTIME_BAD_INPUT_VALUE", + ToolExecutionAttemptOutputErrorKind.ToolRuntimeBadOutputValue => + "TOOL_RUNTIME_BAD_OUTPUT_VALUE", + ToolExecutionAttemptOutputErrorKind.ToolRuntimeRetry => "TOOL_RUNTIME_RETRY", + ToolExecutionAttemptOutputErrorKind.ToolRuntimeContextRequired => + "TOOL_RUNTIME_CONTEXT_REQUIRED", + ToolExecutionAttemptOutputErrorKind.ToolRuntimeFatal => "TOOL_RUNTIME_FATAL", + ToolExecutionAttemptOutputErrorKind.UpstreamRuntimeBadRequest => + "UPSTREAM_RUNTIME_BAD_REQUEST", + ToolExecutionAttemptOutputErrorKind.UpstreamRuntimeAuthError => + "UPSTREAM_RUNTIME_AUTH_ERROR", + ToolExecutionAttemptOutputErrorKind.UpstreamRuntimeNotFound => + "UPSTREAM_RUNTIME_NOT_FOUND", + ToolExecutionAttemptOutputErrorKind.UpstreamRuntimeValidationError => + "UPSTREAM_RUNTIME_VALIDATION_ERROR", + ToolExecutionAttemptOutputErrorKind.UpstreamRuntimeRateLimit => + "UPSTREAM_RUNTIME_RATE_LIMIT", + ToolExecutionAttemptOutputErrorKind.UpstreamRuntimeServerError => + "UPSTREAM_RUNTIME_SERVER_ERROR", + ToolExecutionAttemptOutputErrorKind.UpstreamRuntimeUnmapped => + "UPSTREAM_RUNTIME_UNMAPPED", + ToolExecutionAttemptOutputErrorKind.Unknown => "UNKNOWN", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class LogModel : ModelBase, IFromRaw +{ + public required string Level + { + get + { + if (!this._rawData.TryGetValue("level", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'level' cannot be null", + new System::ArgumentOutOfRangeException("level", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'level' cannot be null", + new System::ArgumentNullException("level") + ); + } + init + { + this._rawData["level"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required string Message + { + get + { + if (!this._rawData.TryGetValue("message", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'message' cannot be null", + new System::ArgumentOutOfRangeException("message", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'message' cannot be null", + new System::ArgumentNullException("message") + ); + } + init + { + this._rawData["message"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Subtype + { + get + { + if (!this._rawData.TryGetValue("subtype", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["subtype"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Level; + _ = this.Message; + _ = this.Subtype; + } + + public LogModel() { } + + public LogModel(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - ToolExecutionAttempt(Dictionary properties) + LogModel(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static ToolExecutionAttempt FromRawUnchecked(Dictionary properties) + public static LogModel FromRawUnchecked(IReadOnlyDictionary rawData) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Tools/ToolExecutionAttemptProperties/Output.cs b/src/ArcadeDotnet/Models/Tools/ToolExecutionAttemptProperties/Output.cs deleted file mode 100644 index 3a94682..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolExecutionAttemptProperties/Output.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using OutputProperties = ArcadeDotnet.Models.Tools.ToolExecutionAttemptProperties.OutputProperties; - -namespace ArcadeDotnet.Models.Tools.ToolExecutionAttemptProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Output : ModelBase, IFromRaw -{ - public AuthorizationResponse? Authorization - { - get - { - if (!this.Properties.TryGetValue("authorization", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["authorization"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public OutputProperties::Error? Error - { - get - { - if (!this.Properties.TryGetValue("error", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["error"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public List? Logs - { - get - { - if (!this.Properties.TryGetValue("logs", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["logs"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public JsonElement? Value - { - get - { - if (!this.Properties.TryGetValue("value", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["value"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - this.Authorization?.Validate(); - this.Error?.Validate(); - foreach (var item in this.Logs ?? []) - { - item.Validate(); - } - _ = this.Value; - } - - public Output() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Output(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Output FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolExecutionAttemptProperties/OutputProperties/Error.cs b/src/ArcadeDotnet/Models/Tools/ToolExecutionAttemptProperties/OutputProperties/Error.cs deleted file mode 100644 index 6ec310a..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolExecutionAttemptProperties/OutputProperties/Error.cs +++ /dev/null @@ -1,229 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Tools.ToolExecutionAttemptProperties.OutputProperties.ErrorProperties; - -namespace ArcadeDotnet.Models.Tools.ToolExecutionAttemptProperties.OutputProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Error : ModelBase, IFromRaw -{ - public required bool CanRetry - { - get - { - if (!this.Properties.TryGetValue("can_retry", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'can_retry' cannot be null", - new ArgumentOutOfRangeException("can_retry", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["can_retry"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required ApiEnum Kind - { - get - { - if (!this.Properties.TryGetValue("kind", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'kind' cannot be null", - new ArgumentOutOfRangeException("kind", "Missing required argument") - ); - - return JsonSerializer.Deserialize>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["kind"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required string Message - { - get - { - if (!this.Properties.TryGetValue("message", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'message' cannot be null", - new ArgumentOutOfRangeException("message", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'message' cannot be null", - new ArgumentNullException("message") - ); - } - set - { - this.Properties["message"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? AdditionalPromptContent - { - get - { - if (!this.Properties.TryGetValue("additional_prompt_content", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["additional_prompt_content"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? DeveloperMessage - { - get - { - if (!this.Properties.TryGetValue("developer_message", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["developer_message"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Extra - { - get - { - if (!this.Properties.TryGetValue("extra", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["extra"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public long? RetryAfterMs - { - get - { - if (!this.Properties.TryGetValue("retry_after_ms", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["retry_after_ms"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Stacktrace - { - get - { - if (!this.Properties.TryGetValue("stacktrace", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["stacktrace"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public long? StatusCode - { - get - { - if (!this.Properties.TryGetValue("status_code", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["status_code"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.CanRetry; - this.Kind.Validate(); - _ = this.Message; - _ = this.AdditionalPromptContent; - _ = this.DeveloperMessage; - if (this.Extra != null) - { - foreach (var item in this.Extra.Values) - { - _ = item; - } - } - _ = this.RetryAfterMs; - _ = this.Stacktrace; - _ = this.StatusCode; - } - - public Error() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Error(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Error FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolExecutionAttemptProperties/OutputProperties/ErrorProperties/Kind.cs b/src/ArcadeDotnet/Models/Tools/ToolExecutionAttemptProperties/OutputProperties/ErrorProperties/Kind.cs deleted file mode 100644 index a52e479..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolExecutionAttemptProperties/OutputProperties/ErrorProperties/Kind.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Tools.ToolExecutionAttemptProperties.OutputProperties.ErrorProperties; - -[JsonConverter(typeof(KindConverter))] -public enum Kind -{ - ToolkitLoadFailed, - ToolDefinitionBadDefinition, - ToolDefinitionBadInputSchema, - ToolDefinitionBadOutputSchema, - ToolRequirementsNotMet, - ToolRuntimeBadInputValue, - ToolRuntimeBadOutputValue, - ToolRuntimeRetry, - ToolRuntimeContextRequired, - ToolRuntimeFatal, - UpstreamRuntimeBadRequest, - UpstreamRuntimeAuthError, - UpstreamRuntimeNotFound, - UpstreamRuntimeValidationError, - UpstreamRuntimeRateLimit, - UpstreamRuntimeServerError, - UpstreamRuntimeUnmapped, - Unknown, -} - -sealed class KindConverter : JsonConverter -{ - public override Kind Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "TOOLKIT_LOAD_FAILED" => Kind.ToolkitLoadFailed, - "TOOL_DEFINITION_BAD_DEFINITION" => Kind.ToolDefinitionBadDefinition, - "TOOL_DEFINITION_BAD_INPUT_SCHEMA" => Kind.ToolDefinitionBadInputSchema, - "TOOL_DEFINITION_BAD_OUTPUT_SCHEMA" => Kind.ToolDefinitionBadOutputSchema, - "TOOL_REQUIREMENTS_NOT_MET" => Kind.ToolRequirementsNotMet, - "TOOL_RUNTIME_BAD_INPUT_VALUE" => Kind.ToolRuntimeBadInputValue, - "TOOL_RUNTIME_BAD_OUTPUT_VALUE" => Kind.ToolRuntimeBadOutputValue, - "TOOL_RUNTIME_RETRY" => Kind.ToolRuntimeRetry, - "TOOL_RUNTIME_CONTEXT_REQUIRED" => Kind.ToolRuntimeContextRequired, - "TOOL_RUNTIME_FATAL" => Kind.ToolRuntimeFatal, - "UPSTREAM_RUNTIME_BAD_REQUEST" => Kind.UpstreamRuntimeBadRequest, - "UPSTREAM_RUNTIME_AUTH_ERROR" => Kind.UpstreamRuntimeAuthError, - "UPSTREAM_RUNTIME_NOT_FOUND" => Kind.UpstreamRuntimeNotFound, - "UPSTREAM_RUNTIME_VALIDATION_ERROR" => Kind.UpstreamRuntimeValidationError, - "UPSTREAM_RUNTIME_RATE_LIMIT" => Kind.UpstreamRuntimeRateLimit, - "UPSTREAM_RUNTIME_SERVER_ERROR" => Kind.UpstreamRuntimeServerError, - "UPSTREAM_RUNTIME_UNMAPPED" => Kind.UpstreamRuntimeUnmapped, - "UNKNOWN" => Kind.Unknown, - _ => (Kind)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Kind value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - Kind.ToolkitLoadFailed => "TOOLKIT_LOAD_FAILED", - Kind.ToolDefinitionBadDefinition => "TOOL_DEFINITION_BAD_DEFINITION", - Kind.ToolDefinitionBadInputSchema => "TOOL_DEFINITION_BAD_INPUT_SCHEMA", - Kind.ToolDefinitionBadOutputSchema => "TOOL_DEFINITION_BAD_OUTPUT_SCHEMA", - Kind.ToolRequirementsNotMet => "TOOL_REQUIREMENTS_NOT_MET", - Kind.ToolRuntimeBadInputValue => "TOOL_RUNTIME_BAD_INPUT_VALUE", - Kind.ToolRuntimeBadOutputValue => "TOOL_RUNTIME_BAD_OUTPUT_VALUE", - Kind.ToolRuntimeRetry => "TOOL_RUNTIME_RETRY", - Kind.ToolRuntimeContextRequired => "TOOL_RUNTIME_CONTEXT_REQUIRED", - Kind.ToolRuntimeFatal => "TOOL_RUNTIME_FATAL", - Kind.UpstreamRuntimeBadRequest => "UPSTREAM_RUNTIME_BAD_REQUEST", - Kind.UpstreamRuntimeAuthError => "UPSTREAM_RUNTIME_AUTH_ERROR", - Kind.UpstreamRuntimeNotFound => "UPSTREAM_RUNTIME_NOT_FOUND", - Kind.UpstreamRuntimeValidationError => "UPSTREAM_RUNTIME_VALIDATION_ERROR", - Kind.UpstreamRuntimeRateLimit => "UPSTREAM_RUNTIME_RATE_LIMIT", - Kind.UpstreamRuntimeServerError => "UPSTREAM_RUNTIME_SERVER_ERROR", - Kind.UpstreamRuntimeUnmapped => "UPSTREAM_RUNTIME_UNMAPPED", - Kind.Unknown => "UNKNOWN", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolExecutionAttemptProperties/OutputProperties/Log.cs b/src/ArcadeDotnet/Models/Tools/ToolExecutionAttemptProperties/OutputProperties/Log.cs deleted file mode 100644 index 6154b7a..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolExecutionAttemptProperties/OutputProperties/Log.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Tools.ToolExecutionAttemptProperties.OutputProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Log : ModelBase, IFromRaw -{ - public required string Level - { - get - { - if (!this.Properties.TryGetValue("level", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'level' cannot be null", - new ArgumentOutOfRangeException("level", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'level' cannot be null", - new ArgumentNullException("level") - ); - } - set - { - this.Properties["level"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required string Message - { - get - { - if (!this.Properties.TryGetValue("message", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'message' cannot be null", - new ArgumentOutOfRangeException("message", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'message' cannot be null", - new ArgumentNullException("message") - ); - } - set - { - this.Properties["message"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Subtype - { - get - { - if (!this.Properties.TryGetValue("subtype", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["subtype"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Level; - _ = this.Message; - _ = this.Subtype; - } - - public Log() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Log(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Log FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolGetParams.cs b/src/ArcadeDotnet/Models/Tools/ToolGetParams.cs index 85b87cb..4be5db2 100644 --- a/src/ArcadeDotnet/Models/Tools/ToolGetParams.cs +++ b/src/ArcadeDotnet/Models/Tools/ToolGetParams.cs @@ -1,9 +1,12 @@ -using System; +using System.Collections.Frozen; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text.Json; +using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Tools.ToolGetParamsProperties; +using ArcadeDotnet.Exceptions; +using System = System; namespace ArcadeDotnet.Models.Tools; @@ -12,26 +15,31 @@ namespace ArcadeDotnet.Models.Tools; /// public sealed record class ToolGetParams : ParamsBase { - public required string Name; + public string? Name { get; init; } /// /// Comma separated tool formats that will be included in the response. /// - public List>? IncludeFormat + public List>? IncludeFormat { get { - if (!this.QueryProperties.TryGetValue("include_format", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("include_format", out JsonElement element)) return null; - return JsonSerializer.Deserialize>?>( + return JsonSerializer.Deserialize>?>( element, ModelBase.SerializerOptions ); } - set + init { - this.QueryProperties["include_format"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["include_format"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -45,36 +53,122 @@ public string? UserID { get { - if (!this.QueryProperties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("user_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["user_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public ToolGetParams() { } + + public ToolGetParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ToolGetParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static ToolGetParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override System::Uri Url(ClientOptions options) { - return new UriBuilder( - client.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/tools/{0}", this.Name) + return new System::UriBuilder( + options.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/tools/{0}", this.Name) ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } } } + +[JsonConverter(typeof(IncludeFormatModelConverter))] +public enum IncludeFormatModel +{ + Arcade, + OpenAI, + Anthropic, +} + +sealed class IncludeFormatModelConverter : JsonConverter +{ + public override IncludeFormatModel Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "arcade" => IncludeFormatModel.Arcade, + "openai" => IncludeFormatModel.OpenAI, + "anthropic" => IncludeFormatModel.Anthropic, + _ => (IncludeFormatModel)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + IncludeFormatModel value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + IncludeFormatModel.Arcade => "arcade", + IncludeFormatModel.OpenAI => "openai", + IncludeFormatModel.Anthropic => "anthropic", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} diff --git a/src/ArcadeDotnet/Models/Tools/ToolGetParamsProperties/IncludeFormat.cs b/src/ArcadeDotnet/Models/Tools/ToolGetParamsProperties/IncludeFormat.cs deleted file mode 100644 index ea47246..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolGetParamsProperties/IncludeFormat.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Tools.ToolGetParamsProperties; - -[JsonConverter(typeof(IncludeFormatConverter))] -public enum IncludeFormat -{ - Arcade, - OpenAI, - Anthropic, -} - -sealed class IncludeFormatConverter : JsonConverter -{ - public override IncludeFormat Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "arcade" => IncludeFormat.Arcade, - "openai" => IncludeFormat.OpenAI, - "anthropic" => IncludeFormat.Anthropic, - _ => (IncludeFormat)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - IncludeFormat value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - IncludeFormat.Arcade => "arcade", - IncludeFormat.OpenAI => "openai", - IncludeFormat.Anthropic => "anthropic", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ToolListPageResponse.cs b/src/ArcadeDotnet/Models/Tools/ToolListPageResponse.cs index 5c605d2..c044ee0 100644 --- a/src/ArcadeDotnet/Models/Tools/ToolListPageResponse.cs +++ b/src/ArcadeDotnet/Models/Tools/ToolListPageResponse.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -13,7 +14,7 @@ public List? Items { get { - if (!this.Properties.TryGetValue("items", out JsonElement element)) + if (!this._rawData.TryGetValue("items", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -21,9 +22,14 @@ public List? Items ModelBase.SerializerOptions ); } - set + init { - this.Properties["items"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["items"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -34,14 +40,19 @@ public long? Limit { get { - if (!this.Properties.TryGetValue("limit", out JsonElement element)) + if (!this._rawData.TryGetValue("limit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["limit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["limit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -52,14 +63,19 @@ public long? Offset { get { - if (!this.Properties.TryGetValue("offset", out JsonElement element)) + if (!this._rawData.TryGetValue("offset", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["offset"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["offset"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -70,14 +86,19 @@ public long? PageCount { get { - if (!this.Properties.TryGetValue("page_count", out JsonElement element)) + if (!this._rawData.TryGetValue("page_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["page_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["page_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -88,14 +109,19 @@ public long? TotalCount { get { - if (!this.Properties.TryGetValue("total_count", out JsonElement element)) + if (!this._rawData.TryGetValue("total_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["total_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["total_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -116,16 +142,23 @@ public override void Validate() public ToolListPageResponse() { } + public ToolListPageResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - ToolListPageResponse(Dictionary properties) + ToolListPageResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static ToolListPageResponse FromRawUnchecked(Dictionary properties) + public static ToolListPageResponse FromRawUnchecked( + IReadOnlyDictionary rawData + ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Tools/ToolListParams.cs b/src/ArcadeDotnet/Models/Tools/ToolListParams.cs index ac16893..6e895ad 100644 --- a/src/ArcadeDotnet/Models/Tools/ToolListParams.cs +++ b/src/ArcadeDotnet/Models/Tools/ToolListParams.cs @@ -1,9 +1,12 @@ -using System; +using System.Collections.Frozen; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text.Json; +using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Tools.ToolListParamsProperties; +using ArcadeDotnet.Exceptions; +using System = System; namespace ArcadeDotnet.Models.Tools; @@ -19,7 +22,7 @@ public List>? IncludeFormat { get { - if (!this.QueryProperties.TryGetValue("include_format", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("include_format", out JsonElement element)) return null; return JsonSerializer.Deserialize>?>( @@ -27,9 +30,14 @@ public List>? IncludeFormat ModelBase.SerializerOptions ); } - set + init { - this.QueryProperties["include_format"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["include_format"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -43,14 +51,19 @@ public long? Limit { get { - if (!this.QueryProperties.TryGetValue("limit", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("limit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["limit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["limit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -64,14 +77,19 @@ public long? Offset { get { - if (!this.QueryProperties.TryGetValue("offset", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("offset", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["offset"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["offset"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -85,14 +103,19 @@ public string? Toolkit { get { - if (!this.QueryProperties.TryGetValue("toolkit", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("toolkit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["toolkit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["toolkit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -106,34 +129,120 @@ public string? UserID { get { - if (!this.QueryProperties.TryGetValue("user_id", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("user_id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["user_id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["user_id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public ToolListParams() { } + + public ToolListParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ToolListParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/tools") + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static ToolListParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override System::Uri Url(ClientOptions options) + { + return new System::UriBuilder(options.BaseUrl.ToString().TrimEnd('/') + "/v1/tools") { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } } } + +[JsonConverter(typeof(IncludeFormatConverter))] +public enum IncludeFormat +{ + Arcade, + OpenAI, + Anthropic, +} + +sealed class IncludeFormatConverter : JsonConverter +{ + public override IncludeFormat Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "arcade" => IncludeFormat.Arcade, + "openai" => IncludeFormat.OpenAI, + "anthropic" => IncludeFormat.Anthropic, + _ => (IncludeFormat)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + IncludeFormat value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + IncludeFormat.Arcade => "arcade", + IncludeFormat.OpenAI => "openai", + IncludeFormat.Anthropic => "anthropic", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} diff --git a/src/ArcadeDotnet/Models/Tools/ToolListParamsProperties/IncludeFormat.cs b/src/ArcadeDotnet/Models/Tools/ToolListParamsProperties/IncludeFormat.cs deleted file mode 100644 index e541cc8..0000000 --- a/src/ArcadeDotnet/Models/Tools/ToolListParamsProperties/IncludeFormat.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Tools.ToolListParamsProperties; - -[JsonConverter(typeof(IncludeFormatConverter))] -public enum IncludeFormat -{ - Arcade, - OpenAI, - Anthropic, -} - -sealed class IncludeFormatConverter : JsonConverter -{ - public override IncludeFormat Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "arcade" => IncludeFormat.Arcade, - "openai" => IncludeFormat.OpenAI, - "anthropic" => IncludeFormat.Anthropic, - _ => (IncludeFormat)(-1), - }; - } - - public override void Write( - Utf8JsonWriter writer, - IncludeFormat value, - JsonSerializerOptions options - ) - { - JsonSerializer.Serialize( - writer, - value switch - { - IncludeFormat.Arcade => "arcade", - IncludeFormat.OpenAI => "openai", - IncludeFormat.Anthropic => "anthropic", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Tools/ValueSchema.cs b/src/ArcadeDotnet/Models/Tools/ValueSchema.cs index b329d58..107be6c 100644 --- a/src/ArcadeDotnet/Models/Tools/ValueSchema.cs +++ b/src/ArcadeDotnet/Models/Tools/ValueSchema.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -15,7 +16,7 @@ public required string ValType { get { - if (!this.Properties.TryGetValue("val_type", out JsonElement element)) + if (!this._rawData.TryGetValue("val_type", out JsonElement element)) throw new ArcadeInvalidDataException( "'val_type' cannot be null", new ArgumentOutOfRangeException("val_type", "Missing required argument") @@ -27,9 +28,9 @@ public required string ValType new ArgumentNullException("val_type") ); } - set + init { - this.Properties["val_type"] = JsonSerializer.SerializeToElement( + this._rawData["val_type"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -40,14 +41,19 @@ public List? Enum { get { - if (!this.Properties.TryGetValue("enum", out JsonElement element)) + if (!this._rawData.TryGetValue("enum", out JsonElement element)) return null; return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["enum"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["enum"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -58,14 +64,19 @@ public string? InnerValType { get { - if (!this.Properties.TryGetValue("inner_val_type", out JsonElement element)) + if (!this._rawData.TryGetValue("inner_val_type", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["inner_val_type"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["inner_val_type"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -75,26 +86,28 @@ public string? InnerValType public override void Validate() { _ = this.ValType; - foreach (var item in this.Enum ?? []) - { - _ = item; - } + _ = this.Enum; _ = this.InnerValType; } public ValueSchema() { } + public ValueSchema(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - ValueSchema(Dictionary properties) + ValueSchema(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static ValueSchema FromRawUnchecked(Dictionary properties) + public static ValueSchema FromRawUnchecked(IReadOnlyDictionary rawData) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } [SetsRequiredMembers] diff --git a/src/ArcadeDotnet/Models/Workers/CreateWorkerRequest.cs b/src/ArcadeDotnet/Models/Workers/CreateWorkerRequest.cs index 77b46c9..0cb98d9 100644 --- a/src/ArcadeDotnet/Models/Workers/CreateWorkerRequest.cs +++ b/src/ArcadeDotnet/Models/Workers/CreateWorkerRequest.cs @@ -1,11 +1,11 @@ using System; +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using ArcadeDotnet.Core; using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Workers.CreateWorkerRequestProperties; namespace ArcadeDotnet.Models.Workers; @@ -16,7 +16,7 @@ public required string ID { get { - if (!this.Properties.TryGetValue("id", out JsonElement element)) + if (!this._rawData.TryGetValue("id", out JsonElement element)) throw new ArcadeInvalidDataException( "'id' cannot be null", new ArgumentOutOfRangeException("id", "Missing required argument") @@ -28,9 +28,9 @@ public required string ID new ArgumentNullException("id") ); } - set + init { - this.Properties["id"] = JsonSerializer.SerializeToElement( + this._rawData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -41,50 +41,71 @@ public bool? Enabled { get { - if (!this.Properties.TryGetValue("enabled", out JsonElement element)) + if (!this._rawData.TryGetValue("enabled", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["enabled"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["enabled"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public HTTP? HTTP + public CreateWorkerRequestHTTP? HTTP { get { - if (!this.Properties.TryGetValue("http", out JsonElement element)) + if (!this._rawData.TryGetValue("http", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); } - set + init { - this.Properties["http"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["http"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public Mcp? Mcp + public CreateWorkerRequestMcp? Mcp { get { - if (!this.Properties.TryGetValue("mcp", out JsonElement element)) + if (!this._rawData.TryGetValue("mcp", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); } - set + init { - this.Properties["mcp"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["mcp"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -95,14 +116,19 @@ public string? Type { get { - if (!this.Properties.TryGetValue("type", out JsonElement element)) + if (!this._rawData.TryGetValue("type", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["type"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["type"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -120,17 +146,24 @@ public override void Validate() public CreateWorkerRequest() { } + public CreateWorkerRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - CreateWorkerRequest(Dictionary properties) + CreateWorkerRequest(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static CreateWorkerRequest FromRawUnchecked(Dictionary properties) + public static CreateWorkerRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } [SetsRequiredMembers] @@ -140,3 +173,438 @@ public CreateWorkerRequest(string id) this.ID = id; } } + +[JsonConverter(typeof(ModelConverter))] +public sealed record class CreateWorkerRequestHTTP : ModelBase, IFromRaw +{ + public required long Retry + { + get + { + if (!this._rawData.TryGetValue("retry", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'retry' cannot be null", + new ArgumentOutOfRangeException("retry", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + this._rawData["retry"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required string Secret + { + get + { + if (!this._rawData.TryGetValue("secret", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'secret' cannot be null", + new ArgumentOutOfRangeException("secret", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'secret' cannot be null", + new ArgumentNullException("secret") + ); + } + init + { + this._rawData["secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required long Timeout + { + get + { + if (!this._rawData.TryGetValue("timeout", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'timeout' cannot be null", + new ArgumentOutOfRangeException("timeout", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + this._rawData["timeout"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required string Uri + { + get + { + if (!this._rawData.TryGetValue("uri", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'uri' cannot be null", + new ArgumentOutOfRangeException("uri", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'uri' cannot be null", + new ArgumentNullException("uri") + ); + } + init + { + this._rawData["uri"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Retry; + _ = this.Secret; + _ = this.Timeout; + _ = this.Uri; + } + + public CreateWorkerRequestHTTP() { } + + public CreateWorkerRequestHTTP(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + CreateWorkerRequestHTTP(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static CreateWorkerRequestHTTP FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class CreateWorkerRequestMcp : ModelBase, IFromRaw +{ + public required long Retry + { + get + { + if (!this._rawData.TryGetValue("retry", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'retry' cannot be null", + new ArgumentOutOfRangeException("retry", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + this._rawData["retry"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required long Timeout + { + get + { + if (!this._rawData.TryGetValue("timeout", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'timeout' cannot be null", + new ArgumentOutOfRangeException("timeout", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + this._rawData["timeout"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required string Uri + { + get + { + if (!this._rawData.TryGetValue("uri", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'uri' cannot be null", + new ArgumentOutOfRangeException("uri", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'uri' cannot be null", + new ArgumentNullException("uri") + ); + } + init + { + this._rawData["uri"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Headers + { + get + { + if (!this._rawData.TryGetValue("headers", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["headers"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public CreateWorkerRequestMcpOauth2? Oauth2 + { + get + { + if (!this._rawData.TryGetValue("oauth2", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["oauth2"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Secrets + { + get + { + if (!this._rawData.TryGetValue("secrets", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["secrets"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Retry; + _ = this.Timeout; + _ = this.Uri; + _ = this.Headers; + this.Oauth2?.Validate(); + _ = this.Secrets; + } + + public CreateWorkerRequestMcp() { } + + public CreateWorkerRequestMcp(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + CreateWorkerRequestMcp(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static CreateWorkerRequestMcp FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class CreateWorkerRequestMcpOauth2 + : ModelBase, + IFromRaw +{ + public string? AuthorizationURL + { + get + { + if (!this._rawData.TryGetValue("authorization_url", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["authorization_url"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientID + { + get + { + if (!this._rawData.TryGetValue("client_id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientSecret + { + get + { + if (!this._rawData.TryGetValue("client_secret", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ExternalID + { + get + { + if (!this._rawData.TryGetValue("external_id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["external_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthorizationURL; + _ = this.ClientID; + _ = this.ClientSecret; + _ = this.ExternalID; + } + + public CreateWorkerRequestMcpOauth2() { } + + public CreateWorkerRequestMcpOauth2(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + CreateWorkerRequestMcpOauth2(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static CreateWorkerRequestMcpOauth2 FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} diff --git a/src/ArcadeDotnet/Models/Workers/CreateWorkerRequestProperties/HTTP.cs b/src/ArcadeDotnet/Models/Workers/CreateWorkerRequestProperties/HTTP.cs deleted file mode 100644 index d16c9ff..0000000 --- a/src/ArcadeDotnet/Models/Workers/CreateWorkerRequestProperties/HTTP.cs +++ /dev/null @@ -1,128 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Workers.CreateWorkerRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class HTTP : ModelBase, IFromRaw -{ - public required long Retry - { - get - { - if (!this.Properties.TryGetValue("retry", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'retry' cannot be null", - new ArgumentOutOfRangeException("retry", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["retry"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required string Secret - { - get - { - if (!this.Properties.TryGetValue("secret", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'secret' cannot be null", - new ArgumentOutOfRangeException("secret", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'secret' cannot be null", - new ArgumentNullException("secret") - ); - } - set - { - this.Properties["secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required long Timeout - { - get - { - if (!this.Properties.TryGetValue("timeout", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'timeout' cannot be null", - new ArgumentOutOfRangeException("timeout", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["timeout"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required string Uri - { - get - { - if (!this.Properties.TryGetValue("uri", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'uri' cannot be null", - new ArgumentOutOfRangeException("uri", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'uri' cannot be null", - new ArgumentNullException("uri") - ); - } - set - { - this.Properties["uri"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Retry; - _ = this.Secret; - _ = this.Timeout; - _ = this.Uri; - } - - public HTTP() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - HTTP(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static HTTP FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/CreateWorkerRequestProperties/Mcp.cs b/src/ArcadeDotnet/Models/Workers/CreateWorkerRequestProperties/Mcp.cs deleted file mode 100644 index 8e724d4..0000000 --- a/src/ArcadeDotnet/Models/Workers/CreateWorkerRequestProperties/Mcp.cs +++ /dev/null @@ -1,178 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Workers.CreateWorkerRequestProperties.McpProperties; - -namespace ArcadeDotnet.Models.Workers.CreateWorkerRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Mcp : ModelBase, IFromRaw -{ - public required long Retry - { - get - { - if (!this.Properties.TryGetValue("retry", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'retry' cannot be null", - new ArgumentOutOfRangeException("retry", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["retry"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required long Timeout - { - get - { - if (!this.Properties.TryGetValue("timeout", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'timeout' cannot be null", - new ArgumentOutOfRangeException("timeout", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["timeout"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required string Uri - { - get - { - if (!this.Properties.TryGetValue("uri", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'uri' cannot be null", - new ArgumentOutOfRangeException("uri", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'uri' cannot be null", - new ArgumentNullException("uri") - ); - } - set - { - this.Properties["uri"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Headers - { - get - { - if (!this.Properties.TryGetValue("headers", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["headers"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Oauth2? Oauth2 - { - get - { - if (!this.Properties.TryGetValue("oauth2", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["oauth2"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Secrets - { - get - { - if (!this.Properties.TryGetValue("secrets", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["secrets"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Retry; - _ = this.Timeout; - _ = this.Uri; - if (this.Headers != null) - { - foreach (var item in this.Headers.Values) - { - _ = item; - } - } - this.Oauth2?.Validate(); - if (this.Secrets != null) - { - foreach (var item in this.Secrets.Values) - { - _ = item; - } - } - } - - public Mcp() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Mcp(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Mcp FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/CreateWorkerRequestProperties/McpProperties/Oauth2.cs b/src/ArcadeDotnet/Models/Workers/CreateWorkerRequestProperties/McpProperties/Oauth2.cs deleted file mode 100644 index 8ffa71f..0000000 --- a/src/ArcadeDotnet/Models/Workers/CreateWorkerRequestProperties/McpProperties/Oauth2.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Workers.CreateWorkerRequestProperties.McpProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Oauth2 : ModelBase, IFromRaw -{ - public string? AuthorizationURL - { - get - { - if (!this.Properties.TryGetValue("authorization_url", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["authorization_url"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientID - { - get - { - if (!this.Properties.TryGetValue("client_id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientSecret - { - get - { - if (!this.Properties.TryGetValue("client_secret", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ExternalID - { - get - { - if (!this.Properties.TryGetValue("external_id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["external_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthorizationURL; - _ = this.ClientID; - _ = this.ClientSecret; - _ = this.ExternalID; - } - - public Oauth2() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Oauth2(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Oauth2 FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/UpdateWorkerRequest.cs b/src/ArcadeDotnet/Models/Workers/UpdateWorkerRequest.cs index 4855814..0c4e456 100644 --- a/src/ArcadeDotnet/Models/Workers/UpdateWorkerRequest.cs +++ b/src/ArcadeDotnet/Models/Workers/UpdateWorkerRequest.cs @@ -1,9 +1,9 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Workers.UpdateWorkerRequestProperties; namespace ArcadeDotnet.Models.Workers; @@ -14,50 +14,71 @@ public bool? Enabled { get { - if (!this.Properties.TryGetValue("enabled", out JsonElement element)) + if (!this._rawData.TryGetValue("enabled", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["enabled"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["enabled"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public HTTP? HTTP + public UpdateWorkerRequestHTTP? HTTP { get { - if (!this.Properties.TryGetValue("http", out JsonElement element)) + if (!this._rawData.TryGetValue("http", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); } - set + init { - this.Properties["http"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["http"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public Mcp? Mcp + public UpdateWorkerRequestMcp? Mcp { get { - if (!this.Properties.TryGetValue("mcp", out JsonElement element)) + if (!this._rawData.TryGetValue("mcp", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); } - set + init { - this.Properties["mcp"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["mcp"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -73,16 +94,436 @@ public override void Validate() public UpdateWorkerRequest() { } + public UpdateWorkerRequest(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + UpdateWorkerRequest(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static UpdateWorkerRequest FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class UpdateWorkerRequestHTTP : ModelBase, IFromRaw +{ + public long? Retry + { + get + { + if (!this._rawData.TryGetValue("retry", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["retry"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Secret + { + get + { + if (!this._rawData.TryGetValue("secret", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public long? Timeout + { + get + { + if (!this._rawData.TryGetValue("timeout", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["timeout"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Uri + { + get + { + if (!this._rawData.TryGetValue("uri", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["uri"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Retry; + _ = this.Secret; + _ = this.Timeout; + _ = this.Uri; + } + + public UpdateWorkerRequestHTTP() { } + + public UpdateWorkerRequestHTTP(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + UpdateWorkerRequestHTTP(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static UpdateWorkerRequestHTTP FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class UpdateWorkerRequestMcp : ModelBase, IFromRaw +{ + public Dictionary? Headers + { + get + { + if (!this._rawData.TryGetValue("headers", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["headers"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public UpdateWorkerRequestMcpOauth2? Oauth2 + { + get + { + if (!this._rawData.TryGetValue("oauth2", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["oauth2"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public long? Retry + { + get + { + if (!this._rawData.TryGetValue("retry", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["retry"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Secrets + { + get + { + if (!this._rawData.TryGetValue("secrets", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["secrets"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public long? Timeout + { + get + { + if (!this._rawData.TryGetValue("timeout", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["timeout"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Uri + { + get + { + if (!this._rawData.TryGetValue("uri", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["uri"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Headers; + this.Oauth2?.Validate(); + _ = this.Retry; + _ = this.Secrets; + _ = this.Timeout; + _ = this.Uri; + } + + public UpdateWorkerRequestMcp() { } + + public UpdateWorkerRequestMcp(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + UpdateWorkerRequestMcp(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static UpdateWorkerRequestMcp FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class UpdateWorkerRequestMcpOauth2 + : ModelBase, + IFromRaw +{ + public string? AuthorizationURL + { + get + { + if (!this._rawData.TryGetValue("authorization_url", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["authorization_url"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientID + { + get + { + if (!this._rawData.TryGetValue("client_id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientSecret + { + get + { + if (!this._rawData.TryGetValue("client_secret", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthorizationURL; + _ = this.ClientID; + _ = this.ClientSecret; + } + + public UpdateWorkerRequestMcpOauth2() { } + + public UpdateWorkerRequestMcpOauth2(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - UpdateWorkerRequest(Dictionary properties) + UpdateWorkerRequestMcpOauth2(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static UpdateWorkerRequest FromRawUnchecked(Dictionary properties) + public static UpdateWorkerRequestMcpOauth2 FromRawUnchecked( + IReadOnlyDictionary rawData + ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Workers/UpdateWorkerRequestProperties/HTTP.cs b/src/ArcadeDotnet/Models/Workers/UpdateWorkerRequestProperties/HTTP.cs deleted file mode 100644 index 4347bf3..0000000 --- a/src/ArcadeDotnet/Models/Workers/UpdateWorkerRequestProperties/HTTP.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Workers.UpdateWorkerRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class HTTP : ModelBase, IFromRaw -{ - public long? Retry - { - get - { - if (!this.Properties.TryGetValue("retry", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["retry"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Secret - { - get - { - if (!this.Properties.TryGetValue("secret", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public long? Timeout - { - get - { - if (!this.Properties.TryGetValue("timeout", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["timeout"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Uri - { - get - { - if (!this.Properties.TryGetValue("uri", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["uri"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Retry; - _ = this.Secret; - _ = this.Timeout; - _ = this.Uri; - } - - public HTTP() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - HTTP(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static HTTP FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/UpdateWorkerRequestProperties/Mcp.cs b/src/ArcadeDotnet/Models/Workers/UpdateWorkerRequestProperties/Mcp.cs deleted file mode 100644 index ec0470b..0000000 --- a/src/ArcadeDotnet/Models/Workers/UpdateWorkerRequestProperties/Mcp.cs +++ /dev/null @@ -1,163 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Workers.UpdateWorkerRequestProperties.McpProperties; - -namespace ArcadeDotnet.Models.Workers.UpdateWorkerRequestProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Mcp : ModelBase, IFromRaw -{ - public Dictionary? Headers - { - get - { - if (!this.Properties.TryGetValue("headers", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["headers"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Oauth2? Oauth2 - { - get - { - if (!this.Properties.TryGetValue("oauth2", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["oauth2"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public long? Retry - { - get - { - if (!this.Properties.TryGetValue("retry", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["retry"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Secrets - { - get - { - if (!this.Properties.TryGetValue("secrets", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["secrets"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public long? Timeout - { - get - { - if (!this.Properties.TryGetValue("timeout", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["timeout"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Uri - { - get - { - if (!this.Properties.TryGetValue("uri", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["uri"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - if (this.Headers != null) - { - foreach (var item in this.Headers.Values) - { - _ = item; - } - } - this.Oauth2?.Validate(); - _ = this.Retry; - if (this.Secrets != null) - { - foreach (var item in this.Secrets.Values) - { - _ = item; - } - } - _ = this.Timeout; - _ = this.Uri; - } - - public Mcp() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Mcp(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Mcp FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/UpdateWorkerRequestProperties/McpProperties/Oauth2.cs b/src/ArcadeDotnet/Models/Workers/UpdateWorkerRequestProperties/McpProperties/Oauth2.cs deleted file mode 100644 index cf8a2a1..0000000 --- a/src/ArcadeDotnet/Models/Workers/UpdateWorkerRequestProperties/McpProperties/Oauth2.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Workers.UpdateWorkerRequestProperties.McpProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Oauth2 : ModelBase, IFromRaw -{ - public string? AuthorizationURL - { - get - { - if (!this.Properties.TryGetValue("authorization_url", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["authorization_url"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientID - { - get - { - if (!this.Properties.TryGetValue("client_id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientSecret - { - get - { - if (!this.Properties.TryGetValue("client_secret", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthorizationURL; - _ = this.ClientID; - _ = this.ClientSecret; - } - - public Oauth2() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Oauth2(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Oauth2 FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerCreateParams.cs b/src/ArcadeDotnet/Models/Workers/WorkerCreateParams.cs index 328f392..7e2480d 100644 --- a/src/ArcadeDotnet/Models/Workers/WorkerCreateParams.cs +++ b/src/ArcadeDotnet/Models/Workers/WorkerCreateParams.cs @@ -1,11 +1,13 @@ using System; +using System.Collections.Frozen; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text; using System.Text.Json; +using System.Text.Json.Serialization; using ArcadeDotnet.Core; using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Workers.WorkerCreateParamsProperties; namespace ArcadeDotnet.Models.Workers; @@ -14,13 +16,17 @@ namespace ArcadeDotnet.Models.Workers; /// public sealed record class WorkerCreateParams : ParamsBase { - public Dictionary BodyProperties { get; set; } = []; + readonly FreezableDictionary _rawBodyData = []; + public IReadOnlyDictionary RawBodyData + { + get { return this._rawBodyData.Freeze(); } + } public required string ID { get { - if (!this.BodyProperties.TryGetValue("id", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("id", out JsonElement element)) throw new ArcadeInvalidDataException( "'id' cannot be null", new ArgumentOutOfRangeException("id", "Missing required argument") @@ -32,9 +38,9 @@ public required string ID new ArgumentNullException("id") ); } - set + init { - this.BodyProperties["id"] = JsonSerializer.SerializeToElement( + this._rawBodyData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -45,14 +51,19 @@ public bool? Enabled { get { - if (!this.BodyProperties.TryGetValue("enabled", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("enabled", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["enabled"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["enabled"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -63,14 +74,19 @@ public HTTP? HTTP { get { - if (!this.BodyProperties.TryGetValue("http", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("http", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["http"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["http"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -81,14 +97,19 @@ public Mcp? Mcp { get { - if (!this.BodyProperties.TryGetValue("mcp", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("mcp", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["mcp"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["mcp"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -99,43 +120,508 @@ public string? Type { get { - if (!this.BodyProperties.TryGetValue("type", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("type", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["type"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["type"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public WorkerCreateParams() { } + + public WorkerCreateParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + WorkerCreateParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData, + FrozenDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } +#pragma warning restore CS8618 + + public static WorkerCreateParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData), + FrozenDictionary.ToFrozenDictionary(rawBodyData) + ); + } + + public override Uri Url(ClientOptions options) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/workers") + return new UriBuilder(options.BaseUrl.ToString().TrimEnd('/') + "/v1/workers") { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } internal override StringContent? BodyContent() { - return new( - JsonSerializer.Serialize(this.BodyProperties), - Encoding.UTF8, - "application/json" - ); + return new(JsonSerializer.Serialize(this.RawBodyData), Encoding.UTF8, "application/json"); } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } } } + +[JsonConverter(typeof(ModelConverter))] +public sealed record class HTTP : ModelBase, IFromRaw +{ + public required long Retry + { + get + { + if (!this._rawData.TryGetValue("retry", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'retry' cannot be null", + new ArgumentOutOfRangeException("retry", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + this._rawData["retry"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required string Secret + { + get + { + if (!this._rawData.TryGetValue("secret", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'secret' cannot be null", + new ArgumentOutOfRangeException("secret", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'secret' cannot be null", + new ArgumentNullException("secret") + ); + } + init + { + this._rawData["secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required long Timeout + { + get + { + if (!this._rawData.TryGetValue("timeout", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'timeout' cannot be null", + new ArgumentOutOfRangeException("timeout", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + this._rawData["timeout"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required string Uri + { + get + { + if (!this._rawData.TryGetValue("uri", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'uri' cannot be null", + new ArgumentOutOfRangeException("uri", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'uri' cannot be null", + new ArgumentNullException("uri") + ); + } + init + { + this._rawData["uri"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Retry; + _ = this.Secret; + _ = this.Timeout; + _ = this.Uri; + } + + public HTTP() { } + + public HTTP(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + HTTP(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static HTTP FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Mcp : ModelBase, IFromRaw +{ + public required long Retry + { + get + { + if (!this._rawData.TryGetValue("retry", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'retry' cannot be null", + new ArgumentOutOfRangeException("retry", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + this._rawData["retry"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required long Timeout + { + get + { + if (!this._rawData.TryGetValue("timeout", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'timeout' cannot be null", + new ArgumentOutOfRangeException("timeout", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + this._rawData["timeout"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public required string Uri + { + get + { + if (!this._rawData.TryGetValue("uri", out JsonElement element)) + throw new ArcadeInvalidDataException( + "'uri' cannot be null", + new ArgumentOutOfRangeException("uri", "Missing required argument") + ); + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) + ?? throw new ArcadeInvalidDataException( + "'uri' cannot be null", + new ArgumentNullException("uri") + ); + } + init + { + this._rawData["uri"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Headers + { + get + { + if (!this._rawData.TryGetValue("headers", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["headers"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Oauth2? Oauth2 + { + get + { + if (!this._rawData.TryGetValue("oauth2", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["oauth2"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Secrets + { + get + { + if (!this._rawData.TryGetValue("secrets", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["secrets"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Retry; + _ = this.Timeout; + _ = this.Uri; + _ = this.Headers; + this.Oauth2?.Validate(); + _ = this.Secrets; + } + + public Mcp() { } + + public Mcp(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Mcp(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Mcp FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Oauth2 : ModelBase, IFromRaw +{ + public string? AuthorizationURL + { + get + { + if (!this._rawData.TryGetValue("authorization_url", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["authorization_url"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientID + { + get + { + if (!this._rawData.TryGetValue("client_id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientSecret + { + get + { + if (!this._rawData.TryGetValue("client_secret", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ExternalID + { + get + { + if (!this._rawData.TryGetValue("external_id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["external_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthorizationURL; + _ = this.ClientID; + _ = this.ClientSecret; + _ = this.ExternalID; + } + + public Oauth2() { } + + public Oauth2(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Oauth2(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Oauth2 FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerCreateParamsProperties/HTTP.cs b/src/ArcadeDotnet/Models/Workers/WorkerCreateParamsProperties/HTTP.cs deleted file mode 100644 index e1fccf7..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerCreateParamsProperties/HTTP.cs +++ /dev/null @@ -1,128 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; - -namespace ArcadeDotnet.Models.Workers.WorkerCreateParamsProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class HTTP : ModelBase, IFromRaw -{ - public required long Retry - { - get - { - if (!this.Properties.TryGetValue("retry", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'retry' cannot be null", - new ArgumentOutOfRangeException("retry", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["retry"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required string Secret - { - get - { - if (!this.Properties.TryGetValue("secret", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'secret' cannot be null", - new ArgumentOutOfRangeException("secret", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'secret' cannot be null", - new ArgumentNullException("secret") - ); - } - set - { - this.Properties["secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required long Timeout - { - get - { - if (!this.Properties.TryGetValue("timeout", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'timeout' cannot be null", - new ArgumentOutOfRangeException("timeout", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["timeout"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required string Uri - { - get - { - if (!this.Properties.TryGetValue("uri", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'uri' cannot be null", - new ArgumentOutOfRangeException("uri", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'uri' cannot be null", - new ArgumentNullException("uri") - ); - } - set - { - this.Properties["uri"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Retry; - _ = this.Secret; - _ = this.Timeout; - _ = this.Uri; - } - - public HTTP() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - HTTP(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static HTTP FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerCreateParamsProperties/Mcp.cs b/src/ArcadeDotnet/Models/Workers/WorkerCreateParamsProperties/Mcp.cs deleted file mode 100644 index b721ba4..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerCreateParamsProperties/Mcp.cs +++ /dev/null @@ -1,178 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Exceptions; -using ArcadeDotnet.Models.Workers.WorkerCreateParamsProperties.McpProperties; - -namespace ArcadeDotnet.Models.Workers.WorkerCreateParamsProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Mcp : ModelBase, IFromRaw -{ - public required long Retry - { - get - { - if (!this.Properties.TryGetValue("retry", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'retry' cannot be null", - new ArgumentOutOfRangeException("retry", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["retry"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required long Timeout - { - get - { - if (!this.Properties.TryGetValue("timeout", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'timeout' cannot be null", - new ArgumentOutOfRangeException("timeout", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["timeout"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public required string Uri - { - get - { - if (!this.Properties.TryGetValue("uri", out JsonElement element)) - throw new ArcadeInvalidDataException( - "'uri' cannot be null", - new ArgumentOutOfRangeException("uri", "Missing required argument") - ); - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions) - ?? throw new ArcadeInvalidDataException( - "'uri' cannot be null", - new ArgumentNullException("uri") - ); - } - set - { - this.Properties["uri"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Headers - { - get - { - if (!this.Properties.TryGetValue("headers", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["headers"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Oauth2? Oauth2 - { - get - { - if (!this.Properties.TryGetValue("oauth2", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["oauth2"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Secrets - { - get - { - if (!this.Properties.TryGetValue("secrets", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["secrets"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Retry; - _ = this.Timeout; - _ = this.Uri; - if (this.Headers != null) - { - foreach (var item in this.Headers.Values) - { - _ = item; - } - } - this.Oauth2?.Validate(); - if (this.Secrets != null) - { - foreach (var item in this.Secrets.Values) - { - _ = item; - } - } - } - - public Mcp() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Mcp(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Mcp FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerCreateParamsProperties/McpProperties/Oauth2.cs b/src/ArcadeDotnet/Models/Workers/WorkerCreateParamsProperties/McpProperties/Oauth2.cs deleted file mode 100644 index 6246f42..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerCreateParamsProperties/McpProperties/Oauth2.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Workers.WorkerCreateParamsProperties.McpProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Oauth2 : ModelBase, IFromRaw -{ - public string? AuthorizationURL - { - get - { - if (!this.Properties.TryGetValue("authorization_url", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["authorization_url"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientID - { - get - { - if (!this.Properties.TryGetValue("client_id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientSecret - { - get - { - if (!this.Properties.TryGetValue("client_secret", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ExternalID - { - get - { - if (!this.Properties.TryGetValue("external_id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["external_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthorizationURL; - _ = this.ClientID; - _ = this.ClientSecret; - _ = this.ExternalID; - } - - public Oauth2() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Oauth2(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Oauth2 FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerDeleteParams.cs b/src/ArcadeDotnet/Models/Workers/WorkerDeleteParams.cs index 48a92fa..331d952 100644 --- a/src/ArcadeDotnet/Models/Workers/WorkerDeleteParams.cs +++ b/src/ArcadeDotnet/Models/Workers/WorkerDeleteParams.cs @@ -1,5 +1,9 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; +using System.Text.Json; using ArcadeDotnet.Core; namespace ArcadeDotnet.Models.Workers; @@ -9,22 +13,56 @@ namespace ArcadeDotnet.Models.Workers; /// public sealed record class WorkerDeleteParams : ParamsBase { - public required string ID; + public string? ID { get; init; } - public override Uri Url(IArcadeClient client) + public WorkerDeleteParams() { } + + public WorkerDeleteParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + WorkerDeleteParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static WorkerDeleteParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { return new UriBuilder( - client.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/workers/{0}", this.ID) + options.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/workers/{0}", this.ID) ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Workers/WorkerGetParams.cs b/src/ArcadeDotnet/Models/Workers/WorkerGetParams.cs index 054bdd7..b5381d5 100644 --- a/src/ArcadeDotnet/Models/Workers/WorkerGetParams.cs +++ b/src/ArcadeDotnet/Models/Workers/WorkerGetParams.cs @@ -1,5 +1,9 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; +using System.Text.Json; using ArcadeDotnet.Core; namespace ArcadeDotnet.Models.Workers; @@ -9,22 +13,56 @@ namespace ArcadeDotnet.Models.Workers; /// public sealed record class WorkerGetParams : ParamsBase { - public required string ID; + public string? ID { get; init; } - public override Uri Url(IArcadeClient client) + public WorkerGetParams() { } + + public WorkerGetParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + WorkerGetParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static WorkerGetParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { return new UriBuilder( - client.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/workers/{0}", this.ID) + options.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/workers/{0}", this.ID) ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Workers/WorkerHealthParams.cs b/src/ArcadeDotnet/Models/Workers/WorkerHealthParams.cs index a5adb9e..89b9f01 100644 --- a/src/ArcadeDotnet/Models/Workers/WorkerHealthParams.cs +++ b/src/ArcadeDotnet/Models/Workers/WorkerHealthParams.cs @@ -1,5 +1,9 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; +using System.Text.Json; using ArcadeDotnet.Core; namespace ArcadeDotnet.Models.Workers; @@ -9,23 +13,57 @@ namespace ArcadeDotnet.Models.Workers; /// public sealed record class WorkerHealthParams : ParamsBase { - public required string ID; + public string? ID { get; init; } - public override Uri Url(IArcadeClient client) + public WorkerHealthParams() { } + + public WorkerHealthParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + WorkerHealthParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static WorkerHealthParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { return new UriBuilder( - client.BaseUrl.ToString().TrimEnd('/') + options.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/workers/{0}/health", this.ID) ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Workers/WorkerHealthResponse.cs b/src/ArcadeDotnet/Models/Workers/WorkerHealthResponse.cs index 5ce31a2..5135bb8 100644 --- a/src/ArcadeDotnet/Models/Workers/WorkerHealthResponse.cs +++ b/src/ArcadeDotnet/Models/Workers/WorkerHealthResponse.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -13,14 +14,19 @@ public string? ID { get { - if (!this.Properties.TryGetValue("id", out JsonElement element)) + if (!this._rawData.TryGetValue("id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -31,14 +37,19 @@ public bool? Enabled { get { - if (!this.Properties.TryGetValue("enabled", out JsonElement element)) + if (!this._rawData.TryGetValue("enabled", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["enabled"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["enabled"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -49,14 +60,19 @@ public bool? Healthy { get { - if (!this.Properties.TryGetValue("healthy", out JsonElement element)) + if (!this._rawData.TryGetValue("healthy", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["healthy"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["healthy"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -67,14 +83,19 @@ public string? Message { get { - if (!this.Properties.TryGetValue("message", out JsonElement element)) + if (!this._rawData.TryGetValue("message", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["message"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["message"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -91,16 +112,23 @@ public override void Validate() public WorkerHealthResponse() { } + public WorkerHealthResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - WorkerHealthResponse(Dictionary properties) + WorkerHealthResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static WorkerHealthResponse FromRawUnchecked(Dictionary properties) + public static WorkerHealthResponse FromRawUnchecked( + IReadOnlyDictionary rawData + ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Workers/WorkerListPageResponse.cs b/src/ArcadeDotnet/Models/Workers/WorkerListPageResponse.cs index 5767732..2dee01f 100644 --- a/src/ArcadeDotnet/Models/Workers/WorkerListPageResponse.cs +++ b/src/ArcadeDotnet/Models/Workers/WorkerListPageResponse.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -13,7 +14,7 @@ public List? Items { get { - if (!this.Properties.TryGetValue("items", out JsonElement element)) + if (!this._rawData.TryGetValue("items", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -21,9 +22,14 @@ public List? Items ModelBase.SerializerOptions ); } - set + init { - this.Properties["items"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["items"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -34,14 +40,19 @@ public long? Limit { get { - if (!this.Properties.TryGetValue("limit", out JsonElement element)) + if (!this._rawData.TryGetValue("limit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["limit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["limit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -52,14 +63,19 @@ public long? Offset { get { - if (!this.Properties.TryGetValue("offset", out JsonElement element)) + if (!this._rawData.TryGetValue("offset", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["offset"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["offset"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -70,14 +86,19 @@ public long? PageCount { get { - if (!this.Properties.TryGetValue("page_count", out JsonElement element)) + if (!this._rawData.TryGetValue("page_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["page_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["page_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -88,14 +109,19 @@ public long? TotalCount { get { - if (!this.Properties.TryGetValue("total_count", out JsonElement element)) + if (!this._rawData.TryGetValue("total_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["total_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["total_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -116,18 +142,23 @@ public override void Validate() public WorkerListPageResponse() { } + public WorkerListPageResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - WorkerListPageResponse(Dictionary properties) + WorkerListPageResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 public static WorkerListPageResponse FromRawUnchecked( - Dictionary properties + IReadOnlyDictionary rawData ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Workers/WorkerListParams.cs b/src/ArcadeDotnet/Models/Workers/WorkerListParams.cs index 46ebfe2..9ca9d5a 100644 --- a/src/ArcadeDotnet/Models/Workers/WorkerListParams.cs +++ b/src/ArcadeDotnet/Models/Workers/WorkerListParams.cs @@ -1,4 +1,7 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text.Json; using ArcadeDotnet.Core; @@ -17,14 +20,19 @@ public long? Limit { get { - if (!this.QueryProperties.TryGetValue("limit", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("limit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["limit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["limit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -38,32 +46,71 @@ public long? Offset { get { - if (!this.QueryProperties.TryGetValue("offset", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("offset", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["offset"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["offset"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public WorkerListParams() { } + + public WorkerListParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + WorkerListParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static WorkerListParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { - return new UriBuilder(client.BaseUrl.ToString().TrimEnd('/') + "/v1/workers") + return new UriBuilder(options.BaseUrl.ToString().TrimEnd('/') + "/v1/workers") { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponse.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponse.cs index 67902d9..78346cd 100644 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponse.cs +++ b/src/ArcadeDotnet/Models/Workers/WorkerResponse.cs @@ -1,9 +1,11 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Workers.WorkerResponseProperties; +using ArcadeDotnet.Exceptions; +using System = System; namespace ArcadeDotnet.Models.Workers; @@ -14,14 +16,19 @@ public string? ID { get { - if (!this.Properties.TryGetValue("id", out JsonElement element)) + if (!this._rawData.TryGetValue("id", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["id"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -32,14 +39,19 @@ public Binding? Binding { get { - if (!this.Properties.TryGetValue("binding", out JsonElement element)) + if (!this._rawData.TryGetValue("binding", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["binding"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["binding"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -50,32 +62,45 @@ public bool? Enabled { get { - if (!this.Properties.TryGetValue("enabled", out JsonElement element)) + if (!this._rawData.TryGetValue("enabled", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["enabled"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["enabled"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public HTTP? HTTP + public WorkerResponseHTTP? HTTP { get { - if (!this.Properties.TryGetValue("http", out JsonElement element)) + if (!this._rawData.TryGetValue("http", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); } - set + init { - this.Properties["http"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["http"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -86,32 +111,45 @@ public bool? Managed { get { - if (!this.Properties.TryGetValue("managed", out JsonElement element)) + if (!this._rawData.TryGetValue("managed", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["managed"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["managed"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public Mcp? Mcp + public WorkerResponseMcp? Mcp { get { - if (!this.Properties.TryGetValue("mcp", out JsonElement element)) + if (!this._rawData.TryGetValue("mcp", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); } - set + init { - this.Properties["mcp"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["mcp"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -122,35 +160,45 @@ public Requirements? Requirements { get { - if (!this.Properties.TryGetValue("requirements", out JsonElement element)) + if (!this._rawData.TryGetValue("requirements", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["requirements"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["requirements"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public ApiEnum? Type + public ApiEnum? Type { get { - if (!this.Properties.TryGetValue("type", out JsonElement element)) + if (!this._rawData.TryGetValue("type", out JsonElement element)) return null; - return JsonSerializer.Deserialize?>( + return JsonSerializer.Deserialize?>( element, ModelBase.SerializerOptions ); } - set + init { - this.Properties["type"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["type"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -171,16 +219,1450 @@ public override void Validate() public WorkerResponse() { } + public WorkerResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + WorkerResponse(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static WorkerResponse FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Binding : ModelBase, IFromRaw +{ + public string? ID + { + get + { + if (!this._rawData.TryGetValue("id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ApiEnum? Type + { + get + { + if (!this._rawData.TryGetValue("type", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["type"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.ID; + this.Type?.Validate(); + } + + public Binding() { } + + public Binding(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Binding(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Binding FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(TypeConverter))] +public enum Type +{ + Static, + Tenant, + Project, + Account, +} + +sealed class TypeConverter : JsonConverter +{ + public override global::ArcadeDotnet.Models.Workers.Type Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "static" => global::ArcadeDotnet.Models.Workers.Type.Static, + "tenant" => global::ArcadeDotnet.Models.Workers.Type.Tenant, + "project" => global::ArcadeDotnet.Models.Workers.Type.Project, + "account" => global::ArcadeDotnet.Models.Workers.Type.Account, + _ => (global::ArcadeDotnet.Models.Workers.Type)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + global::ArcadeDotnet.Models.Workers.Type value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + global::ArcadeDotnet.Models.Workers.Type.Static => "static", + global::ArcadeDotnet.Models.Workers.Type.Tenant => "tenant", + global::ArcadeDotnet.Models.Workers.Type.Project => "project", + global::ArcadeDotnet.Models.Workers.Type.Account => "account", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class WorkerResponseHTTP : ModelBase, IFromRaw +{ + public long? Retry + { + get + { + if (!this._rawData.TryGetValue("retry", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["retry"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Secret? Secret + { + get + { + if (!this._rawData.TryGetValue("secret", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public long? Timeout + { + get + { + if (!this._rawData.TryGetValue("timeout", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["timeout"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Uri + { + get + { + if (!this._rawData.TryGetValue("uri", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["uri"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Retry; + this.Secret?.Validate(); + _ = this.Timeout; + _ = this.Uri; + } + + public WorkerResponseHTTP() { } + + public WorkerResponseHTTP(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + WorkerResponseHTTP(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static WorkerResponseHTTP FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Secret : ModelBase, IFromRaw +{ + public ApiEnum? Binding + { + get + { + if (!this._rawData.TryGetValue("binding", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["binding"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Editable + { + get + { + if (!this._rawData.TryGetValue("editable", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["editable"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Exists + { + get + { + if (!this._rawData.TryGetValue("exists", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["exists"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Hint + { + get + { + if (!this._rawData.TryGetValue("hint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["hint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Value + { + get + { + if (!this._rawData.TryGetValue("value", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["value"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + this.Binding?.Validate(); + _ = this.Editable; + _ = this.Exists; + _ = this.Hint; + _ = this.Value; + } + + public Secret() { } + + public Secret(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - WorkerResponse(Dictionary properties) + Secret(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 - public static WorkerResponse FromRawUnchecked(Dictionary properties) + public static Secret FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(SecretBindingConverter))] +public enum SecretBinding +{ + Static, + Tenant, + Project, + Account, +} + +sealed class SecretBindingConverter : JsonConverter +{ + public override SecretBinding Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "static" => SecretBinding.Static, + "tenant" => SecretBinding.Tenant, + "project" => SecretBinding.Project, + "account" => SecretBinding.Account, + _ => (SecretBinding)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + SecretBinding value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + SecretBinding.Static => "static", + SecretBinding.Tenant => "tenant", + SecretBinding.Project => "project", + SecretBinding.Account => "account", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class WorkerResponseMcp : ModelBase, IFromRaw +{ + public Dictionary? Headers + { + get + { + if (!this._rawData.TryGetValue("headers", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["headers"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public WorkerResponseMcpOauth2? Oauth2 + { + get + { + if (!this._rawData.TryGetValue("oauth2", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["oauth2"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public long? Retry + { + get + { + if (!this._rawData.TryGetValue("retry", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["retry"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Secrets + { + get + { + if (!this._rawData.TryGetValue("secrets", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["secrets"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public long? Timeout + { + get + { + if (!this._rawData.TryGetValue("timeout", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["timeout"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Uri + { + get + { + if (!this._rawData.TryGetValue("uri", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["uri"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Headers; + this.Oauth2?.Validate(); + _ = this.Retry; + if (this.Secrets != null) + { + foreach (var item in this.Secrets.Values) + { + item.Validate(); + } + } + _ = this.Timeout; + _ = this.Uri; + } + + public WorkerResponseMcp() { } + + public WorkerResponseMcp(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + WorkerResponseMcp(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static WorkerResponseMcp FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class WorkerResponseMcpOauth2 : ModelBase, IFromRaw +{ + public string? AuthorizationURL + { + get + { + if (!this._rawData.TryGetValue("authorization_url", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["authorization_url"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientID + { + get + { + if (!this._rawData.TryGetValue("client_id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public ClientSecret? ClientSecret + { + get + { + if (!this._rawData.TryGetValue("client_secret", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? RedirectUri + { + get + { + if (!this._rawData.TryGetValue("redirect_uri", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["redirect_uri"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthorizationURL; + _ = this.ClientID; + this.ClientSecret?.Validate(); + _ = this.RedirectUri; + } + + public WorkerResponseMcpOauth2() { } + + public WorkerResponseMcpOauth2(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + WorkerResponseMcpOauth2(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static WorkerResponseMcpOauth2 FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class ClientSecret : ModelBase, IFromRaw +{ + public ApiEnum? Binding + { + get + { + if (!this._rawData.TryGetValue("binding", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["binding"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Editable + { + get + { + if (!this._rawData.TryGetValue("editable", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["editable"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Exists + { + get + { + if (!this._rawData.TryGetValue("exists", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["exists"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Hint + { + get + { + if (!this._rawData.TryGetValue("hint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["hint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Value + { + get + { + if (!this._rawData.TryGetValue("value", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["value"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + this.Binding?.Validate(); + _ = this.Editable; + _ = this.Exists; + _ = this.Hint; + _ = this.Value; + } + + public ClientSecret() { } + + public ClientSecret(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + ClientSecret(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static ClientSecret FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ClientSecretBindingConverter))] +public enum ClientSecretBinding +{ + Static, + Tenant, + Project, + Account, +} + +sealed class ClientSecretBindingConverter : JsonConverter +{ + public override ClientSecretBinding Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "static" => ClientSecretBinding.Static, + "tenant" => ClientSecretBinding.Tenant, + "project" => ClientSecretBinding.Project, + "account" => ClientSecretBinding.Account, + _ => (ClientSecretBinding)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + ClientSecretBinding value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + ClientSecretBinding.Static => "static", + ClientSecretBinding.Tenant => "tenant", + ClientSecretBinding.Project => "project", + ClientSecretBinding.Account => "account", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class SecretsItem : ModelBase, IFromRaw +{ + public ApiEnum? Binding + { + get + { + if (!this._rawData.TryGetValue("binding", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["binding"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Editable + { + get + { + if (!this._rawData.TryGetValue("editable", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["editable"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Exists + { + get + { + if (!this._rawData.TryGetValue("exists", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["exists"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Hint + { + get + { + if (!this._rawData.TryGetValue("hint", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["hint"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Value + { + get + { + if (!this._rawData.TryGetValue("value", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["value"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + this.Binding?.Validate(); + _ = this.Editable; + _ = this.Exists; + _ = this.Hint; + _ = this.Value; + } + + public SecretsItem() { } + + public SecretsItem(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + SecretsItem(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static SecretsItem FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(SecretsItemBindingConverter))] +public enum SecretsItemBinding +{ + Static, + Tenant, + Project, + Account, +} + +sealed class SecretsItemBindingConverter : JsonConverter +{ + public override SecretsItemBinding Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "static" => SecretsItemBinding.Static, + "tenant" => SecretsItemBinding.Tenant, + "project" => SecretsItemBinding.Project, + "account" => SecretsItemBinding.Account, + _ => (SecretsItemBinding)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + SecretsItemBinding value, + JsonSerializerOptions options + ) + { + JsonSerializer.Serialize( + writer, + value switch + { + SecretsItemBinding.Static => "static", + SecretsItemBinding.Tenant => "tenant", + SecretsItemBinding.Project => "project", + SecretsItemBinding.Account => "account", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Requirements : ModelBase, IFromRaw +{ + public Authorization? Authorization + { + get + { + if (!this._rawData.TryGetValue("authorization", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["authorization"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public bool? Met + { + get + { + if (!this._rawData.TryGetValue("met", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["met"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + this.Authorization?.Validate(); + _ = this.Met; + } + + public Requirements() { } + + public Requirements(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Requirements(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Requirements FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class Authorization : ModelBase, IFromRaw +{ + public bool? Met + { + get + { + if (!this._rawData.TryGetValue("met", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["met"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public AuthorizationOauth2? Oauth2 + { + get + { + if (!this._rawData.TryGetValue("oauth2", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["oauth2"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Met; + this.Oauth2?.Validate(); + } + + public Authorization() { } + + public Authorization(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + Authorization(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static Authorization FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class AuthorizationOauth2 : ModelBase, IFromRaw +{ + public bool? Met + { + get + { + if (!this._rawData.TryGetValue("met", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["met"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Met; + } + + public AuthorizationOauth2() { } + + public AuthorizationOauth2(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + AuthorizationOauth2(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static AuthorizationOauth2 FromRawUnchecked( + IReadOnlyDictionary rawData + ) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(WorkerResponseTypeConverter))] +public enum WorkerResponseType +{ + HTTP, + Mcp, + Unknown, +} + +sealed class WorkerResponseTypeConverter : JsonConverter +{ + public override WorkerResponseType Read( + ref Utf8JsonReader reader, + System::Type typeToConvert, + JsonSerializerOptions options + ) + { + return JsonSerializer.Deserialize(ref reader, options) switch + { + "http" => WorkerResponseType.HTTP, + "mcp" => WorkerResponseType.Mcp, + "unknown" => WorkerResponseType.Unknown, + _ => (WorkerResponseType)(-1), + }; + } + + public override void Write( + Utf8JsonWriter writer, + WorkerResponseType value, + JsonSerializerOptions options + ) { - return new(properties); + JsonSerializer.Serialize( + writer, + value switch + { + WorkerResponseType.HTTP => "http", + WorkerResponseType.Mcp => "mcp", + WorkerResponseType.Unknown => "unknown", + _ => throw new ArcadeInvalidDataException( + string.Format("Invalid value '{0}' in {1}", value, nameof(value)) + ), + }, + options + ); } } diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/Binding.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/Binding.cs deleted file mode 100644 index cd5be5d..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/Binding.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using BindingProperties = ArcadeDotnet.Models.Workers.WorkerResponseProperties.BindingProperties; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Binding : ModelBase, IFromRaw -{ - public string? ID - { - get - { - if (!this.Properties.TryGetValue("id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ApiEnum? Type - { - get - { - if (!this.Properties.TryGetValue("type", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["type"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.ID; - this.Type?.Validate(); - } - - public Binding() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Binding(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Binding FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/BindingProperties/Type.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/BindingProperties/Type.cs deleted file mode 100644 index 72eed29..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/BindingProperties/Type.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; -using System = System; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties.BindingProperties; - -[JsonConverter(typeof(TypeConverter))] -public enum Type -{ - Static, - Tenant, - Project, - Account, -} - -sealed class TypeConverter : JsonConverter -{ - public override Type Read( - ref Utf8JsonReader reader, - System::Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "static" => BindingProperties.Type.Static, - "tenant" => BindingProperties.Type.Tenant, - "project" => BindingProperties.Type.Project, - "account" => BindingProperties.Type.Account, - _ => (Type)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Type value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - BindingProperties.Type.Static => "static", - BindingProperties.Type.Tenant => "tenant", - BindingProperties.Type.Project => "project", - BindingProperties.Type.Account => "account", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/HTTP.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/HTTP.cs deleted file mode 100644 index 75da05a..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/HTTP.cs +++ /dev/null @@ -1,107 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Workers.WorkerResponseProperties.HTTPProperties; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class HTTP : ModelBase, IFromRaw -{ - public long? Retry - { - get - { - if (!this.Properties.TryGetValue("retry", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["retry"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Secret? Secret - { - get - { - if (!this.Properties.TryGetValue("secret", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public long? Timeout - { - get - { - if (!this.Properties.TryGetValue("timeout", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["timeout"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Uri - { - get - { - if (!this.Properties.TryGetValue("uri", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["uri"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Retry; - this.Secret?.Validate(); - _ = this.Timeout; - _ = this.Uri; - } - - public HTTP() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - HTTP(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static HTTP FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/HTTPProperties/Secret.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/HTTPProperties/Secret.cs deleted file mode 100644 index 1f71895..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/HTTPProperties/Secret.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using SecretProperties = ArcadeDotnet.Models.Workers.WorkerResponseProperties.HTTPProperties.SecretProperties; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties.HTTPProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Secret : ModelBase, IFromRaw -{ - public ApiEnum? Binding - { - get - { - if (!this.Properties.TryGetValue("binding", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["binding"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Editable - { - get - { - if (!this.Properties.TryGetValue("editable", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["editable"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Exists - { - get - { - if (!this.Properties.TryGetValue("exists", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["exists"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Hint - { - get - { - if (!this.Properties.TryGetValue("hint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["hint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Value - { - get - { - if (!this.Properties.TryGetValue("value", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["value"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - this.Binding?.Validate(); - _ = this.Editable; - _ = this.Exists; - _ = this.Hint; - _ = this.Value; - } - - public Secret() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Secret(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Secret FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/HTTPProperties/SecretProperties/Binding.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/HTTPProperties/SecretProperties/Binding.cs deleted file mode 100644 index 7cbea63..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/HTTPProperties/SecretProperties/Binding.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; -using System = System; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties.HTTPProperties.SecretProperties; - -[JsonConverter(typeof(BindingConverter))] -public enum Binding -{ - Static, - Tenant, - Project, - Account, -} - -sealed class BindingConverter : JsonConverter -{ - public override Binding Read( - ref Utf8JsonReader reader, - System::Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "static" => Binding.Static, - "tenant" => Binding.Tenant, - "project" => Binding.Project, - "account" => Binding.Account, - _ => (Binding)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Binding value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - Binding.Static => "static", - Binding.Tenant => "tenant", - Binding.Project => "project", - Binding.Account => "account", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/Mcp.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/Mcp.cs deleted file mode 100644 index 91ee20f..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/Mcp.cs +++ /dev/null @@ -1,164 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Workers.WorkerResponseProperties.McpProperties; -using ArcadeDotnet.Models.Workers.WorkerResponseProperties.McpProperties.SecretsProperties; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Mcp : ModelBase, IFromRaw -{ - public Dictionary? Headers - { - get - { - if (!this.Properties.TryGetValue("headers", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["headers"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Oauth2? Oauth2 - { - get - { - if (!this.Properties.TryGetValue("oauth2", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["oauth2"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public long? Retry - { - get - { - if (!this.Properties.TryGetValue("retry", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["retry"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Secrets - { - get - { - if (!this.Properties.TryGetValue("secrets", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["secrets"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public long? Timeout - { - get - { - if (!this.Properties.TryGetValue("timeout", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["timeout"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Uri - { - get - { - if (!this.Properties.TryGetValue("uri", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["uri"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - if (this.Headers != null) - { - foreach (var item in this.Headers.Values) - { - _ = item; - } - } - this.Oauth2?.Validate(); - _ = this.Retry; - if (this.Secrets != null) - { - foreach (var item in this.Secrets.Values) - { - item.Validate(); - } - } - _ = this.Timeout; - _ = this.Uri; - } - - public Mcp() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Mcp(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Mcp FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/Oauth2.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/Oauth2.cs deleted file mode 100644 index c4efe04..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/Oauth2.cs +++ /dev/null @@ -1,107 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Workers.WorkerResponseProperties.McpProperties.Oauth2Properties; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties.McpProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Oauth2 : ModelBase, IFromRaw -{ - public string? AuthorizationURL - { - get - { - if (!this.Properties.TryGetValue("authorization_url", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["authorization_url"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientID - { - get - { - if (!this.Properties.TryGetValue("client_id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public ClientSecret? ClientSecret - { - get - { - if (!this.Properties.TryGetValue("client_secret", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? RedirectUri - { - get - { - if (!this.Properties.TryGetValue("redirect_uri", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["redirect_uri"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthorizationURL; - _ = this.ClientID; - this.ClientSecret?.Validate(); - _ = this.RedirectUri; - } - - public Oauth2() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Oauth2(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Oauth2 FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/Oauth2Properties/ClientSecret.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/Oauth2Properties/ClientSecret.cs deleted file mode 100644 index a0babb0..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/Oauth2Properties/ClientSecret.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ClientSecretProperties = ArcadeDotnet.Models.Workers.WorkerResponseProperties.McpProperties.Oauth2Properties.ClientSecretProperties; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties.McpProperties.Oauth2Properties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class ClientSecret : ModelBase, IFromRaw -{ - public ApiEnum? Binding - { - get - { - if (!this.Properties.TryGetValue("binding", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["binding"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Editable - { - get - { - if (!this.Properties.TryGetValue("editable", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["editable"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Exists - { - get - { - if (!this.Properties.TryGetValue("exists", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["exists"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Hint - { - get - { - if (!this.Properties.TryGetValue("hint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["hint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Value - { - get - { - if (!this.Properties.TryGetValue("value", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["value"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - this.Binding?.Validate(); - _ = this.Editable; - _ = this.Exists; - _ = this.Hint; - _ = this.Value; - } - - public ClientSecret() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - ClientSecret(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static ClientSecret FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/Oauth2Properties/ClientSecretProperties/Binding.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/Oauth2Properties/ClientSecretProperties/Binding.cs deleted file mode 100644 index ef0ed9a..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/Oauth2Properties/ClientSecretProperties/Binding.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; -using System = System; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties.McpProperties.Oauth2Properties.ClientSecretProperties; - -[JsonConverter(typeof(BindingConverter))] -public enum Binding -{ - Static, - Tenant, - Project, - Account, -} - -sealed class BindingConverter : JsonConverter -{ - public override Binding Read( - ref Utf8JsonReader reader, - System::Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "static" => Binding.Static, - "tenant" => Binding.Tenant, - "project" => Binding.Project, - "account" => Binding.Account, - _ => (Binding)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Binding value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - Binding.Static => "static", - Binding.Tenant => "tenant", - Binding.Project => "project", - Binding.Account => "account", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/SecretsProperties/SecretsItem.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/SecretsProperties/SecretsItem.cs deleted file mode 100644 index 4fe1206..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/SecretsProperties/SecretsItem.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using SecretsItemProperties = ArcadeDotnet.Models.Workers.WorkerResponseProperties.McpProperties.SecretsProperties.SecretsItemProperties; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties.McpProperties.SecretsProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class SecretsItem : ModelBase, IFromRaw -{ - public ApiEnum? Binding - { - get - { - if (!this.Properties.TryGetValue("binding", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["binding"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Editable - { - get - { - if (!this.Properties.TryGetValue("editable", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["editable"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Exists - { - get - { - if (!this.Properties.TryGetValue("exists", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["exists"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Hint - { - get - { - if (!this.Properties.TryGetValue("hint", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["hint"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Value - { - get - { - if (!this.Properties.TryGetValue("value", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["value"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - this.Binding?.Validate(); - _ = this.Editable; - _ = this.Exists; - _ = this.Hint; - _ = this.Value; - } - - public SecretsItem() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - SecretsItem(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static SecretsItem FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/SecretsProperties/SecretsItemProperties/Binding.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/SecretsProperties/SecretsItemProperties/Binding.cs deleted file mode 100644 index 880cfdf..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/McpProperties/SecretsProperties/SecretsItemProperties/Binding.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; -using System = System; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties.McpProperties.SecretsProperties.SecretsItemProperties; - -[JsonConverter(typeof(BindingConverter))] -public enum Binding -{ - Static, - Tenant, - Project, - Account, -} - -sealed class BindingConverter : JsonConverter -{ - public override Binding Read( - ref Utf8JsonReader reader, - System::Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "static" => Binding.Static, - "tenant" => Binding.Tenant, - "project" => Binding.Project, - "account" => Binding.Account, - _ => (Binding)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Binding value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - Binding.Static => "static", - Binding.Tenant => "tenant", - Binding.Project => "project", - Binding.Account => "account", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/Requirements.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/Requirements.cs deleted file mode 100644 index d7f57e6..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/Requirements.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Workers.WorkerResponseProperties.RequirementsProperties; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Requirements : ModelBase, IFromRaw -{ - public Authorization? Authorization - { - get - { - if (!this.Properties.TryGetValue("authorization", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["authorization"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public bool? Met - { - get - { - if (!this.Properties.TryGetValue("met", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["met"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - this.Authorization?.Validate(); - _ = this.Met; - } - - public Requirements() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Requirements(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Requirements FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/RequirementsProperties/Authorization.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/RequirementsProperties/Authorization.cs deleted file mode 100644 index 7a5d095..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/RequirementsProperties/Authorization.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Workers.WorkerResponseProperties.RequirementsProperties.AuthorizationProperties; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties.RequirementsProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Authorization : ModelBase, IFromRaw -{ - public bool? Met - { - get - { - if (!this.Properties.TryGetValue("met", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["met"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Oauth2? Oauth2 - { - get - { - if (!this.Properties.TryGetValue("oauth2", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["oauth2"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Met; - this.Oauth2?.Validate(); - } - - public Authorization() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Authorization(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Authorization FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/RequirementsProperties/AuthorizationProperties/Oauth2.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/RequirementsProperties/AuthorizationProperties/Oauth2.cs deleted file mode 100644 index f7ae02c..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/RequirementsProperties/AuthorizationProperties/Oauth2.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties.RequirementsProperties.AuthorizationProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Oauth2 : ModelBase, IFromRaw -{ - public bool? Met - { - get - { - if (!this.Properties.TryGetValue("met", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["met"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Met; - } - - public Oauth2() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Oauth2(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Oauth2 FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/Type.cs b/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/Type.cs deleted file mode 100644 index e8486c6..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerResponseProperties/Type.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Exceptions; -using System = System; - -namespace ArcadeDotnet.Models.Workers.WorkerResponseProperties; - -[JsonConverter(typeof(TypeConverter))] -public enum Type -{ - HTTP, - Mcp, - Unknown, -} - -sealed class TypeConverter : JsonConverter -{ - public override Type Read( - ref Utf8JsonReader reader, - System::Type typeToConvert, - JsonSerializerOptions options - ) - { - return JsonSerializer.Deserialize(ref reader, options) switch - { - "http" => WorkerResponseProperties.Type.HTTP, - "mcp" => WorkerResponseProperties.Type.Mcp, - "unknown" => WorkerResponseProperties.Type.Unknown, - _ => (Type)(-1), - }; - } - - public override void Write(Utf8JsonWriter writer, Type value, JsonSerializerOptions options) - { - JsonSerializer.Serialize( - writer, - value switch - { - WorkerResponseProperties.Type.HTTP => "http", - WorkerResponseProperties.Type.Mcp => "mcp", - WorkerResponseProperties.Type.Unknown => "unknown", - _ => throw new ArcadeInvalidDataException( - string.Format("Invalid value '{0}' in {1}", value, nameof(value)) - ), - }, - options - ); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerToolsPageResponse.cs b/src/ArcadeDotnet/Models/Workers/WorkerToolsPageResponse.cs index f5bcdde..c0c688b 100644 --- a/src/ArcadeDotnet/Models/Workers/WorkerToolsPageResponse.cs +++ b/src/ArcadeDotnet/Models/Workers/WorkerToolsPageResponse.cs @@ -1,3 +1,4 @@ +using System.Collections.Frozen; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Json; @@ -14,7 +15,7 @@ public List? Items { get { - if (!this.Properties.TryGetValue("items", out JsonElement element)) + if (!this._rawData.TryGetValue("items", out JsonElement element)) return null; return JsonSerializer.Deserialize?>( @@ -22,9 +23,14 @@ public List? Items ModelBase.SerializerOptions ); } - set + init { - this.Properties["items"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["items"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -35,14 +41,19 @@ public long? Limit { get { - if (!this.Properties.TryGetValue("limit", out JsonElement element)) + if (!this._rawData.TryGetValue("limit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["limit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["limit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -53,14 +64,19 @@ public long? Offset { get { - if (!this.Properties.TryGetValue("offset", out JsonElement element)) + if (!this._rawData.TryGetValue("offset", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["offset"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["offset"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -71,14 +87,19 @@ public long? PageCount { get { - if (!this.Properties.TryGetValue("page_count", out JsonElement element)) + if (!this._rawData.TryGetValue("page_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["page_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["page_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -89,14 +110,19 @@ public long? TotalCount { get { - if (!this.Properties.TryGetValue("total_count", out JsonElement element)) + if (!this._rawData.TryGetValue("total_count", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.Properties["total_count"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawData["total_count"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -117,18 +143,23 @@ public override void Validate() public WorkerToolsPageResponse() { } + public WorkerToolsPageResponse(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + #pragma warning disable CS8618 [SetsRequiredMembers] - WorkerToolsPageResponse(Dictionary properties) + WorkerToolsPageResponse(FrozenDictionary rawData) { - Properties = properties; + this._rawData = [.. rawData]; } #pragma warning restore CS8618 public static WorkerToolsPageResponse FromRawUnchecked( - Dictionary properties + IReadOnlyDictionary rawData ) { - return new(properties); + return new(FrozenDictionary.ToFrozenDictionary(rawData)); } } diff --git a/src/ArcadeDotnet/Models/Workers/WorkerToolsParams.cs b/src/ArcadeDotnet/Models/Workers/WorkerToolsParams.cs index 51939ae..88f9d5b 100644 --- a/src/ArcadeDotnet/Models/Workers/WorkerToolsParams.cs +++ b/src/ArcadeDotnet/Models/Workers/WorkerToolsParams.cs @@ -1,4 +1,7 @@ using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text.Json; using ArcadeDotnet.Core; @@ -10,7 +13,7 @@ namespace ArcadeDotnet.Models.Workers; /// public sealed record class WorkerToolsParams : ParamsBase { - public required string ID; + public string? ID { get; init; } /// /// Number of items to return (default: 25, max: 100) @@ -19,14 +22,19 @@ public long? Limit { get { - if (!this.QueryProperties.TryGetValue("limit", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("limit", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["limit"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["limit"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); @@ -40,34 +48,74 @@ public long? Offset { get { - if (!this.QueryProperties.TryGetValue("offset", out JsonElement element)) + if (!this._rawQueryData.TryGetValue("offset", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.QueryProperties["offset"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawQueryData["offset"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public WorkerToolsParams() { } + + public WorkerToolsParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + WorkerToolsParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + } +#pragma warning restore CS8618 + + public static WorkerToolsParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData) + ); + } + + public override Uri Url(ClientOptions options) { return new UriBuilder( - client.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/workers/{0}/tools", this.ID) + options.BaseUrl.ToString().TrimEnd('/') + + string.Format("/v1/workers/{0}/tools", this.ID) ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } diff --git a/src/ArcadeDotnet/Models/Workers/WorkerUpdateParams.cs b/src/ArcadeDotnet/Models/Workers/WorkerUpdateParams.cs index 1002c13..5c1a23f 100644 --- a/src/ArcadeDotnet/Models/Workers/WorkerUpdateParams.cs +++ b/src/ArcadeDotnet/Models/Workers/WorkerUpdateParams.cs @@ -1,10 +1,12 @@ using System; +using System.Collections.Frozen; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text; using System.Text.Json; +using System.Text.Json.Serialization; using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Workers.WorkerUpdateParamsProperties; namespace ArcadeDotnet.Models.Workers; @@ -13,89 +15,549 @@ namespace ArcadeDotnet.Models.Workers; /// public sealed record class WorkerUpdateParams : ParamsBase { - public Dictionary BodyProperties { get; set; } = []; + readonly FreezableDictionary _rawBodyData = []; + public IReadOnlyDictionary RawBodyData + { + get { return this._rawBodyData.Freeze(); } + } - public required string ID; + public string? ID { get; init; } public bool? Enabled { get { - if (!this.BodyProperties.TryGetValue("enabled", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("enabled", out JsonElement element)) return null; return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["enabled"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["enabled"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public HTTP? HTTP + public HTTPModel? HTTP { get { - if (!this.BodyProperties.TryGetValue("http", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("http", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["http"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["http"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public Mcp? Mcp + public McpModel? Mcp { get { - if (!this.BodyProperties.TryGetValue("mcp", out JsonElement element)) + if (!this._rawBodyData.TryGetValue("mcp", out JsonElement element)) return null; - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); } - set + init { - this.BodyProperties["mcp"] = JsonSerializer.SerializeToElement( + if (value == null) + { + return; + } + + this._rawBodyData["mcp"] = JsonSerializer.SerializeToElement( value, ModelBase.SerializerOptions ); } } - public override Uri Url(IArcadeClient client) + public WorkerUpdateParams() { } + + public WorkerUpdateParams( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + WorkerUpdateParams( + FrozenDictionary rawHeaderData, + FrozenDictionary rawQueryData, + FrozenDictionary rawBodyData + ) + { + this._rawHeaderData = [.. rawHeaderData]; + this._rawQueryData = [.. rawQueryData]; + this._rawBodyData = [.. rawBodyData]; + } +#pragma warning restore CS8618 + + public static WorkerUpdateParams FromRawUnchecked( + IReadOnlyDictionary rawHeaderData, + IReadOnlyDictionary rawQueryData, + IReadOnlyDictionary rawBodyData + ) + { + return new( + FrozenDictionary.ToFrozenDictionary(rawHeaderData), + FrozenDictionary.ToFrozenDictionary(rawQueryData), + FrozenDictionary.ToFrozenDictionary(rawBodyData) + ); + } + + public override Uri Url(ClientOptions options) { return new UriBuilder( - client.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/workers/{0}", this.ID) + options.BaseUrl.ToString().TrimEnd('/') + string.Format("/v1/workers/{0}", this.ID) ) { - Query = this.QueryString(client), + Query = this.QueryString(options), }.Uri; } internal override StringContent? BodyContent() { - return new( - JsonSerializer.Serialize(this.BodyProperties), - Encoding.UTF8, - "application/json" - ); + return new(JsonSerializer.Serialize(this.RawBodyData), Encoding.UTF8, "application/json"); } - internal override void AddHeadersToRequest(HttpRequestMessage request, IArcadeClient client) + internal override void AddHeadersToRequest(HttpRequestMessage request, ClientOptions options) { - ParamsBase.AddDefaultHeaders(request, client); - foreach (var item in this.HeaderProperties) + ParamsBase.AddDefaultHeaders(request, options); + foreach (var item in this.RawHeaderData) { ParamsBase.AddHeaderElementToRequest(request, item.Key, item.Value); } } } + +[JsonConverter(typeof(ModelConverter))] +public sealed record class HTTPModel : ModelBase, IFromRaw +{ + public long? Retry + { + get + { + if (!this._rawData.TryGetValue("retry", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["retry"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Secret + { + get + { + if (!this._rawData.TryGetValue("secret", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public long? Timeout + { + get + { + if (!this._rawData.TryGetValue("timeout", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["timeout"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Uri + { + get + { + if (!this._rawData.TryGetValue("uri", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["uri"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Retry; + _ = this.Secret; + _ = this.Timeout; + _ = this.Uri; + } + + public HTTPModel() { } + + public HTTPModel(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + HTTPModel(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static HTTPModel FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class McpModel : ModelBase, IFromRaw +{ + public Dictionary? Headers + { + get + { + if (!this._rawData.TryGetValue("headers", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["headers"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public McpModelOauth2? Oauth2 + { + get + { + if (!this._rawData.TryGetValue("oauth2", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["oauth2"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public long? Retry + { + get + { + if (!this._rawData.TryGetValue("retry", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["retry"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public Dictionary? Secrets + { + get + { + if (!this._rawData.TryGetValue("secrets", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize?>( + element, + ModelBase.SerializerOptions + ); + } + init + { + if (value == null) + { + return; + } + + this._rawData["secrets"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public long? Timeout + { + get + { + if (!this._rawData.TryGetValue("timeout", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["timeout"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? Uri + { + get + { + if (!this._rawData.TryGetValue("uri", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["uri"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.Headers; + this.Oauth2?.Validate(); + _ = this.Retry; + _ = this.Secrets; + _ = this.Timeout; + _ = this.Uri; + } + + public McpModel() { } + + public McpModel(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + McpModel(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static McpModel FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} + +[JsonConverter(typeof(ModelConverter))] +public sealed record class McpModelOauth2 : ModelBase, IFromRaw +{ + public string? AuthorizationURL + { + get + { + if (!this._rawData.TryGetValue("authorization_url", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["authorization_url"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientID + { + get + { + if (!this._rawData.TryGetValue("client_id", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_id"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public string? ClientSecret + { + get + { + if (!this._rawData.TryGetValue("client_secret", out JsonElement element)) + return null; + + return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); + } + init + { + if (value == null) + { + return; + } + + this._rawData["client_secret"] = JsonSerializer.SerializeToElement( + value, + ModelBase.SerializerOptions + ); + } + } + + public override void Validate() + { + _ = this.AuthorizationURL; + _ = this.ClientID; + _ = this.ClientSecret; + } + + public McpModelOauth2() { } + + public McpModelOauth2(IReadOnlyDictionary rawData) + { + this._rawData = [.. rawData]; + } + +#pragma warning disable CS8618 + [SetsRequiredMembers] + McpModelOauth2(FrozenDictionary rawData) + { + this._rawData = [.. rawData]; + } +#pragma warning restore CS8618 + + public static McpModelOauth2 FromRawUnchecked(IReadOnlyDictionary rawData) + { + return new(FrozenDictionary.ToFrozenDictionary(rawData)); + } +} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerUpdateParamsProperties/HTTP.cs b/src/ArcadeDotnet/Models/Workers/WorkerUpdateParamsProperties/HTTP.cs deleted file mode 100644 index 5603b0c..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerUpdateParamsProperties/HTTP.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Workers.WorkerUpdateParamsProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class HTTP : ModelBase, IFromRaw -{ - public long? Retry - { - get - { - if (!this.Properties.TryGetValue("retry", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["retry"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Secret - { - get - { - if (!this.Properties.TryGetValue("secret", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public long? Timeout - { - get - { - if (!this.Properties.TryGetValue("timeout", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["timeout"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Uri - { - get - { - if (!this.Properties.TryGetValue("uri", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["uri"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.Retry; - _ = this.Secret; - _ = this.Timeout; - _ = this.Uri; - } - - public HTTP() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - HTTP(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static HTTP FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerUpdateParamsProperties/Mcp.cs b/src/ArcadeDotnet/Models/Workers/WorkerUpdateParamsProperties/Mcp.cs deleted file mode 100644 index eae9b35..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerUpdateParamsProperties/Mcp.cs +++ /dev/null @@ -1,163 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Workers.WorkerUpdateParamsProperties.McpProperties; - -namespace ArcadeDotnet.Models.Workers.WorkerUpdateParamsProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Mcp : ModelBase, IFromRaw -{ - public Dictionary? Headers - { - get - { - if (!this.Properties.TryGetValue("headers", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["headers"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Oauth2? Oauth2 - { - get - { - if (!this.Properties.TryGetValue("oauth2", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["oauth2"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public long? Retry - { - get - { - if (!this.Properties.TryGetValue("retry", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["retry"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public Dictionary? Secrets - { - get - { - if (!this.Properties.TryGetValue("secrets", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize?>( - element, - ModelBase.SerializerOptions - ); - } - set - { - this.Properties["secrets"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public long? Timeout - { - get - { - if (!this.Properties.TryGetValue("timeout", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["timeout"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? Uri - { - get - { - if (!this.Properties.TryGetValue("uri", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["uri"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - if (this.Headers != null) - { - foreach (var item in this.Headers.Values) - { - _ = item; - } - } - this.Oauth2?.Validate(); - _ = this.Retry; - if (this.Secrets != null) - { - foreach (var item in this.Secrets.Values) - { - _ = item; - } - } - _ = this.Timeout; - _ = this.Uri; - } - - public Mcp() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Mcp(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Mcp FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Models/Workers/WorkerUpdateParamsProperties/McpProperties/Oauth2.cs b/src/ArcadeDotnet/Models/Workers/WorkerUpdateParamsProperties/McpProperties/Oauth2.cs deleted file mode 100644 index a8d50f6..0000000 --- a/src/ArcadeDotnet/Models/Workers/WorkerUpdateParamsProperties/McpProperties/Oauth2.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; -using ArcadeDotnet.Core; - -namespace ArcadeDotnet.Models.Workers.WorkerUpdateParamsProperties.McpProperties; - -[JsonConverter(typeof(ModelConverter))] -public sealed record class Oauth2 : ModelBase, IFromRaw -{ - public string? AuthorizationURL - { - get - { - if (!this.Properties.TryGetValue("authorization_url", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["authorization_url"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientID - { - get - { - if (!this.Properties.TryGetValue("client_id", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_id"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public string? ClientSecret - { - get - { - if (!this.Properties.TryGetValue("client_secret", out JsonElement element)) - return null; - - return JsonSerializer.Deserialize(element, ModelBase.SerializerOptions); - } - set - { - this.Properties["client_secret"] = JsonSerializer.SerializeToElement( - value, - ModelBase.SerializerOptions - ); - } - } - - public override void Validate() - { - _ = this.AuthorizationURL; - _ = this.ClientID; - _ = this.ClientSecret; - } - - public Oauth2() { } - -#pragma warning disable CS8618 - [SetsRequiredMembers] - Oauth2(Dictionary properties) - { - Properties = properties; - } -#pragma warning restore CS8618 - - public static Oauth2 FromRawUnchecked(Dictionary properties) - { - return new(properties); - } -} diff --git a/src/ArcadeDotnet/Services/Admin/AuthProviderService.cs b/src/ArcadeDotnet/Services/Admin/AuthProviderService.cs new file mode 100644 index 0000000..5762a31 --- /dev/null +++ b/src/ArcadeDotnet/Services/Admin/AuthProviderService.cs @@ -0,0 +1,189 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Exceptions; +using ArcadeDotnet.Models.Admin.AuthProviders; + +namespace ArcadeDotnet.Services.Admin; + +public sealed class AuthProviderService : IAuthProviderService +{ + public IAuthProviderService WithOptions(Func modifier) + { + return new AuthProviderService(this._client.WithOptions(modifier)); + } + + readonly IArcadeClient _client; + + public AuthProviderService(IArcadeClient client) + { + _client = client; + } + + public async Task Create( + AuthProviderCreateParams parameters, + CancellationToken cancellationToken = default + ) + { + HttpRequest request = new() + { + Method = HttpMethod.Post, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var authProviderResponse = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + authProviderResponse.Validate(); + } + return authProviderResponse; + } + + public async Task List( + AuthProviderListParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var authProviders = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + authProviders.Validate(); + } + return authProviders; + } + + public async Task Delete( + AuthProviderDeleteParams parameters, + CancellationToken cancellationToken = default + ) + { + if (parameters.ID == null) + { + throw new ArcadeInvalidDataException("'parameters.ID' cannot be null"); + } + + HttpRequest request = new() + { + Method = HttpMethod.Delete, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var authProviderResponse = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + authProviderResponse.Validate(); + } + return authProviderResponse; + } + + public async Task Delete( + string id, + AuthProviderDeleteParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + return await this.Delete(parameters with { ID = id }, cancellationToken); + } + + public async Task Get( + AuthProviderGetParams parameters, + CancellationToken cancellationToken = default + ) + { + if (parameters.ID == null) + { + throw new ArcadeInvalidDataException("'parameters.ID' cannot be null"); + } + + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var authProviderResponse = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + authProviderResponse.Validate(); + } + return authProviderResponse; + } + + public async Task Get( + string id, + AuthProviderGetParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + return await this.Get(parameters with { ID = id }, cancellationToken); + } + + public async Task Patch( + AuthProviderPatchParams parameters, + CancellationToken cancellationToken = default + ) + { + if (parameters.ID == null) + { + throw new ArcadeInvalidDataException("'parameters.ID' cannot be null"); + } + + HttpRequest request = new() + { + Method = HttpMethod.Patch, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var authProviderResponse = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + authProviderResponse.Validate(); + } + return authProviderResponse; + } + + public async Task Patch( + string id, + AuthProviderPatchParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + return await this.Patch(parameters with { ID = id }, cancellationToken); + } +} diff --git a/src/ArcadeDotnet/Services/Admin/AuthProviders/AuthProviderService.cs b/src/ArcadeDotnet/Services/Admin/AuthProviders/AuthProviderService.cs deleted file mode 100644 index a288fcd..0000000 --- a/src/ArcadeDotnet/Services/Admin/AuthProviders/AuthProviderService.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System.Net.Http; -using System.Threading.Tasks; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.AuthProviders; - -namespace ArcadeDotnet.Services.Admin.AuthProviders; - -public sealed class AuthProviderService : IAuthProviderService -{ - readonly IArcadeClient _client; - - public AuthProviderService(IArcadeClient client) - { - _client = client; - } - - public async Task Create(AuthProviderCreateParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Post, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task List(AuthProviderListParams? parameters = null) - { - parameters ??= new(); - - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Delete(AuthProviderDeleteParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Delete, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Get(AuthProviderGetParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Patch(AuthProviderPatchParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Patch, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } -} diff --git a/src/ArcadeDotnet/Services/Admin/AuthProviders/IAuthProviderService.cs b/src/ArcadeDotnet/Services/Admin/AuthProviders/IAuthProviderService.cs deleted file mode 100644 index 4b19f0c..0000000 --- a/src/ArcadeDotnet/Services/Admin/AuthProviders/IAuthProviderService.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Threading.Tasks; -using ArcadeDotnet.Models.Admin.AuthProviders; - -namespace ArcadeDotnet.Services.Admin.AuthProviders; - -public interface IAuthProviderService -{ - /// - /// Create a new auth provider - /// - Task Create(AuthProviderCreateParams parameters); - - /// - /// List a page of auth providers that are available to the caller - /// - Task List(AuthProviderListParams? parameters = null); - - /// - /// Delete a specific auth provider - /// - Task Delete(AuthProviderDeleteParams parameters); - - /// - /// Get the details of a specific auth provider - /// - Task Get(AuthProviderGetParams parameters); - - /// - /// Patch an existing auth provider - /// - Task Patch(AuthProviderPatchParams parameters); -} diff --git a/src/ArcadeDotnet/Services/Admin/IAdminService.cs b/src/ArcadeDotnet/Services/Admin/IAdminService.cs deleted file mode 100644 index d9eb828..0000000 --- a/src/ArcadeDotnet/Services/Admin/IAdminService.cs +++ /dev/null @@ -1,14 +0,0 @@ -using ArcadeDotnet.Services.Admin.AuthProviders; -using ArcadeDotnet.Services.Admin.Secrets; -using ArcadeDotnet.Services.Admin.UserConnections; - -namespace ArcadeDotnet.Services.Admin; - -public interface IAdminService -{ - IUserConnectionService UserConnections { get; } - - IAuthProviderService AuthProviders { get; } - - ISecretService Secrets { get; } -} diff --git a/src/ArcadeDotnet/Services/Admin/IAuthProviderService.cs b/src/ArcadeDotnet/Services/Admin/IAuthProviderService.cs new file mode 100644 index 0000000..e3fe9e2 --- /dev/null +++ b/src/ArcadeDotnet/Services/Admin/IAuthProviderService.cs @@ -0,0 +1,84 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Models.Admin.AuthProviders; + +namespace ArcadeDotnet.Services.Admin; + +/// +/// NOTE: Do not inherit from this type outside the SDK unless you're okay with breaking +/// changes in non-major versions. We may add new methods in the future that cause +/// existing derived classes to break. +/// +public interface IAuthProviderService +{ + IAuthProviderService WithOptions(Func modifier); + + /// + /// Create a new auth provider + /// + Task Create( + AuthProviderCreateParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// List a page of auth providers that are available to the caller + /// + Task List( + AuthProviderListParams? parameters = null, + CancellationToken cancellationToken = default + ); + + /// + /// Delete a specific auth provider + /// + Task Delete( + AuthProviderDeleteParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Delete a specific auth provider + /// + Task Delete( + string id, + AuthProviderDeleteParams? parameters = null, + CancellationToken cancellationToken = default + ); + + /// + /// Get the details of a specific auth provider + /// + Task Get( + AuthProviderGetParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Get the details of a specific auth provider + /// + Task Get( + string id, + AuthProviderGetParams? parameters = null, + CancellationToken cancellationToken = default + ); + + /// + /// Patch an existing auth provider + /// + Task Patch( + AuthProviderPatchParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Patch an existing auth provider + /// + Task Patch( + string id, + AuthProviderPatchParams? parameters = null, + CancellationToken cancellationToken = default + ); +} diff --git a/src/ArcadeDotnet/Services/Admin/ISecretService.cs b/src/ArcadeDotnet/Services/Admin/ISecretService.cs new file mode 100644 index 0000000..958633f --- /dev/null +++ b/src/ArcadeDotnet/Services/Admin/ISecretService.cs @@ -0,0 +1,39 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Models.Admin.Secrets; + +namespace ArcadeDotnet.Services.Admin; + +/// +/// NOTE: Do not inherit from this type outside the SDK unless you're okay with breaking +/// changes in non-major versions. We may add new methods in the future that cause +/// existing derived classes to break. +/// +public interface ISecretService +{ + ISecretService WithOptions(Func modifier); + + /// + /// List all secrets that are visible to the caller + /// + Task List( + SecretListParams? parameters = null, + CancellationToken cancellationToken = default + ); + + /// + /// Delete a secret by its ID + /// + Task Delete(SecretDeleteParams parameters, CancellationToken cancellationToken = default); + + /// + /// Delete a secret by its ID + /// + Task Delete( + string secretID, + SecretDeleteParams? parameters = null, + CancellationToken cancellationToken = default + ); +} diff --git a/src/ArcadeDotnet/Services/Admin/IUserConnectionService.cs b/src/ArcadeDotnet/Services/Admin/IUserConnectionService.cs new file mode 100644 index 0000000..0aac94d --- /dev/null +++ b/src/ArcadeDotnet/Services/Admin/IUserConnectionService.cs @@ -0,0 +1,42 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Models.Admin.UserConnections; + +namespace ArcadeDotnet.Services.Admin; + +/// +/// NOTE: Do not inherit from this type outside the SDK unless you're okay with breaking +/// changes in non-major versions. We may add new methods in the future that cause +/// existing derived classes to break. +/// +public interface IUserConnectionService +{ + IUserConnectionService WithOptions(Func modifier); + + /// + /// List all auth connections + /// + Task List( + UserConnectionListParams? parameters = null, + CancellationToken cancellationToken = default + ); + + /// + /// Delete a user/auth provider connection + /// + Task Delete( + UserConnectionDeleteParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Delete a user/auth provider connection + /// + Task Delete( + string id, + UserConnectionDeleteParams? parameters = null, + CancellationToken cancellationToken = default + ); +} diff --git a/src/ArcadeDotnet/Services/Admin/SecretService.cs b/src/ArcadeDotnet/Services/Admin/SecretService.cs new file mode 100644 index 0000000..d37e518 --- /dev/null +++ b/src/ArcadeDotnet/Services/Admin/SecretService.cs @@ -0,0 +1,80 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Exceptions; +using ArcadeDotnet.Models.Admin.Secrets; + +namespace ArcadeDotnet.Services.Admin; + +public sealed class SecretService : ISecretService +{ + public ISecretService WithOptions(Func modifier) + { + return new SecretService(this._client.WithOptions(modifier)); + } + + readonly IArcadeClient _client; + + public SecretService(IArcadeClient client) + { + _client = client; + } + + public async Task List( + SecretListParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var secrets = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + secrets.Validate(); + } + return secrets; + } + + public async Task Delete( + SecretDeleteParams parameters, + CancellationToken cancellationToken = default + ) + { + if (parameters.SecretID == null) + { + throw new ArcadeInvalidDataException("'parameters.SecretID' cannot be null"); + } + + HttpRequest request = new() + { + Method = HttpMethod.Delete, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + } + + public async Task Delete( + string secretID, + SecretDeleteParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + await this.Delete(parameters with { SecretID = secretID }, cancellationToken); + } +} diff --git a/src/ArcadeDotnet/Services/Admin/Secrets/ISecretService.cs b/src/ArcadeDotnet/Services/Admin/Secrets/ISecretService.cs deleted file mode 100644 index 1b1d06b..0000000 --- a/src/ArcadeDotnet/Services/Admin/Secrets/ISecretService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Threading.Tasks; -using ArcadeDotnet.Models.Admin.Secrets; - -namespace ArcadeDotnet.Services.Admin.Secrets; - -public interface ISecretService -{ - /// - /// List all secrets that are visible to the caller - /// - Task List(SecretListParams? parameters = null); - - /// - /// Delete a secret by its ID - /// - Task Delete(SecretDeleteParams parameters); -} diff --git a/src/ArcadeDotnet/Services/Admin/Secrets/SecretService.cs b/src/ArcadeDotnet/Services/Admin/Secrets/SecretService.cs deleted file mode 100644 index 0a37baf..0000000 --- a/src/ArcadeDotnet/Services/Admin/Secrets/SecretService.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Net.Http; -using System.Threading.Tasks; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.Secrets; - -namespace ArcadeDotnet.Services.Admin.Secrets; - -public sealed class SecretService : ISecretService -{ - readonly IArcadeClient _client; - - public SecretService(IArcadeClient client) - { - _client = client; - } - - public async Task List(SecretListParams? parameters = null) - { - parameters ??= new(); - - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Delete(SecretDeleteParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Delete, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return; - } -} diff --git a/src/ArcadeDotnet/Services/Admin/UserConnectionService.cs b/src/ArcadeDotnet/Services/Admin/UserConnectionService.cs new file mode 100644 index 0000000..c3d937a --- /dev/null +++ b/src/ArcadeDotnet/Services/Admin/UserConnectionService.cs @@ -0,0 +1,80 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Exceptions; +using ArcadeDotnet.Models.Admin.UserConnections; + +namespace ArcadeDotnet.Services.Admin; + +public sealed class UserConnectionService : IUserConnectionService +{ + public IUserConnectionService WithOptions(Func modifier) + { + return new UserConnectionService(this._client.WithOptions(modifier)); + } + + readonly IArcadeClient _client; + + public UserConnectionService(IArcadeClient client) + { + _client = client; + } + + public async Task List( + UserConnectionListParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var page = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + page.Validate(); + } + return page; + } + + public async Task Delete( + UserConnectionDeleteParams parameters, + CancellationToken cancellationToken = default + ) + { + if (parameters.ID == null) + { + throw new ArcadeInvalidDataException("'parameters.ID' cannot be null"); + } + + HttpRequest request = new() + { + Method = HttpMethod.Delete, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + } + + public async Task Delete( + string id, + UserConnectionDeleteParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + await this.Delete(parameters with { ID = id }, cancellationToken); + } +} diff --git a/src/ArcadeDotnet/Services/Admin/UserConnections/IUserConnectionService.cs b/src/ArcadeDotnet/Services/Admin/UserConnections/IUserConnectionService.cs deleted file mode 100644 index e60a5f3..0000000 --- a/src/ArcadeDotnet/Services/Admin/UserConnections/IUserConnectionService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Threading.Tasks; -using ArcadeDotnet.Models.Admin.UserConnections; - -namespace ArcadeDotnet.Services.Admin.UserConnections; - -public interface IUserConnectionService -{ - /// - /// List all auth connections - /// - Task List(UserConnectionListParams? parameters = null); - - /// - /// Delete a user/auth provider connection - /// - Task Delete(UserConnectionDeleteParams parameters); -} diff --git a/src/ArcadeDotnet/Services/Admin/UserConnections/UserConnectionService.cs b/src/ArcadeDotnet/Services/Admin/UserConnections/UserConnectionService.cs deleted file mode 100644 index d3e4e22..0000000 --- a/src/ArcadeDotnet/Services/Admin/UserConnections/UserConnectionService.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Net.Http; -using System.Threading.Tasks; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Admin.UserConnections; - -namespace ArcadeDotnet.Services.Admin.UserConnections; - -public sealed class UserConnectionService : IUserConnectionService -{ - readonly IArcadeClient _client; - - public UserConnectionService(IArcadeClient client) - { - _client = client; - } - - public async Task List( - UserConnectionListParams? parameters = null - ) - { - parameters ??= new(); - - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Delete(UserConnectionDeleteParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Delete, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return; - } -} diff --git a/src/ArcadeDotnet/Services/Admin/AdminService.cs b/src/ArcadeDotnet/Services/AdminService.cs similarity index 68% rename from src/ArcadeDotnet/Services/Admin/AdminService.cs rename to src/ArcadeDotnet/Services/AdminService.cs index ebcab64..3feb901 100644 --- a/src/ArcadeDotnet/Services/Admin/AdminService.cs +++ b/src/ArcadeDotnet/Services/AdminService.cs @@ -1,14 +1,21 @@ using System; -using ArcadeDotnet.Services.Admin.AuthProviders; -using ArcadeDotnet.Services.Admin.Secrets; -using ArcadeDotnet.Services.Admin.UserConnections; +using ArcadeDotnet.Core; +using ArcadeDotnet.Services.Admin; -namespace ArcadeDotnet.Services.Admin; +namespace ArcadeDotnet.Services; public sealed class AdminService : IAdminService { + public IAdminService WithOptions(Func modifier) + { + return new AdminService(this._client.WithOptions(modifier)); + } + + readonly IArcadeClient _client; + public AdminService(IArcadeClient client) { + _client = client; _userConnections = new(() => new UserConnectionService(client)); _authProviders = new(() => new AuthProviderService(client)); _secrets = new(() => new SecretService(client)); diff --git a/src/ArcadeDotnet/Services/Auth/AuthService.cs b/src/ArcadeDotnet/Services/Auth/AuthService.cs deleted file mode 100644 index 34a8d1d..0000000 --- a/src/ArcadeDotnet/Services/Auth/AuthService.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Net.Http; -using System.Threading.Tasks; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models; -using ArcadeDotnet.Models.Auth; - -namespace ArcadeDotnet.Services.Auth; - -public sealed class AuthService : IAuthService -{ - readonly IArcadeClient _client; - - public AuthService(IArcadeClient client) - { - _client = client; - } - - public async Task Authorize(AuthAuthorizeParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Post, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task ConfirmUser(AuthConfirmUserParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Post, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Status(AuthStatusParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } -} diff --git a/src/ArcadeDotnet/Services/Auth/IAuthService.cs b/src/ArcadeDotnet/Services/Auth/IAuthService.cs deleted file mode 100644 index 823265e..0000000 --- a/src/ArcadeDotnet/Services/Auth/IAuthService.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Threading.Tasks; -using ArcadeDotnet.Models; -using ArcadeDotnet.Models.Auth; - -namespace ArcadeDotnet.Services.Auth; - -public interface IAuthService -{ - /// - /// Starts the authorization process for given authorization requirements - /// - Task Authorize(AuthAuthorizeParams parameters); - - /// - /// Confirms a user's details during an authorization flow - /// - Task ConfirmUser(AuthConfirmUserParams parameters); - - /// - /// Checks the status of an ongoing authorization process for a specific tool. - /// If 'wait' param is present, does not respond until either the auth status - /// becomes completed or the timeout is reached. - /// - Task Status(AuthStatusParams parameters); -} diff --git a/src/ArcadeDotnet/Services/AuthService.cs b/src/ArcadeDotnet/Services/AuthService.cs new file mode 100644 index 0000000..00f60ba --- /dev/null +++ b/src/ArcadeDotnet/Services/AuthService.cs @@ -0,0 +1,93 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Models; +using ArcadeDotnet.Models.Auth; + +namespace ArcadeDotnet.Services; + +public sealed class AuthService : IAuthService +{ + public IAuthService WithOptions(Func modifier) + { + return new AuthService(this._client.WithOptions(modifier)); + } + + readonly IArcadeClient _client; + + public AuthService(IArcadeClient client) + { + _client = client; + } + + public async Task Authorize( + AuthAuthorizeParams parameters, + CancellationToken cancellationToken = default + ) + { + HttpRequest request = new() + { + Method = HttpMethod.Post, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var authorizationResponse = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + authorizationResponse.Validate(); + } + return authorizationResponse; + } + + public async Task ConfirmUser( + AuthConfirmUserParams parameters, + CancellationToken cancellationToken = default + ) + { + HttpRequest request = new() + { + Method = HttpMethod.Post, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var confirmUserResponse = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + confirmUserResponse.Validate(); + } + return confirmUserResponse; + } + + public async Task Status( + AuthStatusParams parameters, + CancellationToken cancellationToken = default + ) + { + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var authorizationResponse = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + authorizationResponse.Validate(); + } + return authorizationResponse; + } +} diff --git a/src/ArcadeDotnet/Services/Chat/ChatService.cs b/src/ArcadeDotnet/Services/Chat/ChatService.cs deleted file mode 100644 index 89b0186..0000000 --- a/src/ArcadeDotnet/Services/Chat/ChatService.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using ArcadeDotnet.Services.Chat.Completions; - -namespace ArcadeDotnet.Services.Chat; - -public sealed class ChatService : IChatService -{ - public ChatService(IArcadeClient client) - { - _completions = new(() => new CompletionService(client)); - } - - readonly Lazy _completions; - public ICompletionService Completions - { - get { return _completions.Value; } - } -} diff --git a/src/ArcadeDotnet/Services/Chat/CompletionService.cs b/src/ArcadeDotnet/Services/Chat/CompletionService.cs new file mode 100644 index 0000000..77530dc --- /dev/null +++ b/src/ArcadeDotnet/Services/Chat/CompletionService.cs @@ -0,0 +1,49 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Models.Chat; +using ArcadeDotnet.Models.Chat.Completions; + +namespace ArcadeDotnet.Services.Chat; + +public sealed class CompletionService : ICompletionService +{ + public ICompletionService WithOptions(Func modifier) + { + return new CompletionService(this._client.WithOptions(modifier)); + } + + readonly IArcadeClient _client; + + public CompletionService(IArcadeClient client) + { + _client = client; + } + + public async Task Create( + CompletionCreateParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + HttpRequest request = new() + { + Method = HttpMethod.Post, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var chatResponse = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + chatResponse.Validate(); + } + return chatResponse; + } +} diff --git a/src/ArcadeDotnet/Services/Chat/Completions/CompletionService.cs b/src/ArcadeDotnet/Services/Chat/Completions/CompletionService.cs deleted file mode 100644 index fef80dd..0000000 --- a/src/ArcadeDotnet/Services/Chat/Completions/CompletionService.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Net.Http; -using System.Threading.Tasks; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Chat; -using ArcadeDotnet.Models.Chat.Completions; - -namespace ArcadeDotnet.Services.Chat.Completions; - -public sealed class CompletionService : ICompletionService -{ - readonly IArcadeClient _client; - - public CompletionService(IArcadeClient client) - { - _client = client; - } - - public async Task Create(CompletionCreateParams? parameters = null) - { - parameters ??= new(); - - HttpRequest request = new() - { - Method = HttpMethod.Post, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } -} diff --git a/src/ArcadeDotnet/Services/Chat/Completions/ICompletionService.cs b/src/ArcadeDotnet/Services/Chat/Completions/ICompletionService.cs deleted file mode 100644 index 614cb9c..0000000 --- a/src/ArcadeDotnet/Services/Chat/Completions/ICompletionService.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Threading.Tasks; -using ArcadeDotnet.Models.Chat; -using ArcadeDotnet.Models.Chat.Completions; - -namespace ArcadeDotnet.Services.Chat.Completions; - -public interface ICompletionService -{ - /// - /// Interact with language models via OpenAI's chat completions API - /// - Task Create(CompletionCreateParams? parameters = null); -} diff --git a/src/ArcadeDotnet/Services/Chat/IChatService.cs b/src/ArcadeDotnet/Services/Chat/IChatService.cs deleted file mode 100644 index 9709bd4..0000000 --- a/src/ArcadeDotnet/Services/Chat/IChatService.cs +++ /dev/null @@ -1,8 +0,0 @@ -using ArcadeDotnet.Services.Chat.Completions; - -namespace ArcadeDotnet.Services.Chat; - -public interface IChatService -{ - ICompletionService Completions { get; } -} diff --git a/src/ArcadeDotnet/Services/Chat/ICompletionService.cs b/src/ArcadeDotnet/Services/Chat/ICompletionService.cs new file mode 100644 index 0000000..125b81e --- /dev/null +++ b/src/ArcadeDotnet/Services/Chat/ICompletionService.cs @@ -0,0 +1,26 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Models.Chat; +using ArcadeDotnet.Models.Chat.Completions; + +namespace ArcadeDotnet.Services.Chat; + +/// +/// NOTE: Do not inherit from this type outside the SDK unless you're okay with breaking +/// changes in non-major versions. We may add new methods in the future that cause +/// existing derived classes to break. +/// +public interface ICompletionService +{ + ICompletionService WithOptions(Func modifier); + + /// + /// Interact with language models via OpenAI's chat completions API + /// + Task Create( + CompletionCreateParams? parameters = null, + CancellationToken cancellationToken = default + ); +} diff --git a/src/ArcadeDotnet/Services/ChatService.cs b/src/ArcadeDotnet/Services/ChatService.cs new file mode 100644 index 0000000..416567b --- /dev/null +++ b/src/ArcadeDotnet/Services/ChatService.cs @@ -0,0 +1,27 @@ +using System; +using ArcadeDotnet.Core; +using ArcadeDotnet.Services.Chat; + +namespace ArcadeDotnet.Services; + +public sealed class ChatService : IChatService +{ + public IChatService WithOptions(Func modifier) + { + return new ChatService(this._client.WithOptions(modifier)); + } + + readonly IArcadeClient _client; + + public ChatService(IArcadeClient client) + { + _client = client; + _completions = new(() => new CompletionService(client)); + } + + readonly Lazy _completions; + public ICompletionService Completions + { + get { return _completions.Value; } + } +} diff --git a/src/ArcadeDotnet/Services/Health/HealthService.cs b/src/ArcadeDotnet/Services/Health/HealthService.cs deleted file mode 100644 index 99d4ef3..0000000 --- a/src/ArcadeDotnet/Services/Health/HealthService.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Net.Http; -using System.Threading.Tasks; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Health; - -namespace ArcadeDotnet.Services.Health; - -public sealed class HealthService : IHealthService -{ - readonly IArcadeClient _client; - - public HealthService(IArcadeClient client) - { - _client = client; - } - - public async Task Check(HealthCheckParams? parameters = null) - { - parameters ??= new(); - - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } -} diff --git a/src/ArcadeDotnet/Services/Health/IHealthService.cs b/src/ArcadeDotnet/Services/Health/IHealthService.cs deleted file mode 100644 index 9c8b49b..0000000 --- a/src/ArcadeDotnet/Services/Health/IHealthService.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Threading.Tasks; -using ArcadeDotnet.Models.Health; - -namespace ArcadeDotnet.Services.Health; - -public interface IHealthService -{ - /// - /// Check if Arcade Engine is healthy - /// - Task Check(HealthCheckParams? parameters = null); -} diff --git a/src/ArcadeDotnet/Services/HealthService.cs b/src/ArcadeDotnet/Services/HealthService.cs new file mode 100644 index 0000000..c1d78a8 --- /dev/null +++ b/src/ArcadeDotnet/Services/HealthService.cs @@ -0,0 +1,48 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Models.Health; + +namespace ArcadeDotnet.Services; + +public sealed class HealthService : IHealthService +{ + public IHealthService WithOptions(Func modifier) + { + return new HealthService(this._client.WithOptions(modifier)); + } + + readonly IArcadeClient _client; + + public HealthService(IArcadeClient client) + { + _client = client; + } + + public async Task Check( + HealthCheckParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var healthSchema = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + healthSchema.Validate(); + } + return healthSchema; + } +} diff --git a/src/ArcadeDotnet/Services/IAdminService.cs b/src/ArcadeDotnet/Services/IAdminService.cs new file mode 100644 index 0000000..b428ad5 --- /dev/null +++ b/src/ArcadeDotnet/Services/IAdminService.cs @@ -0,0 +1,21 @@ +using System; +using ArcadeDotnet.Core; +using ArcadeDotnet.Services.Admin; + +namespace ArcadeDotnet.Services; + +/// +/// NOTE: Do not inherit from this type outside the SDK unless you're okay with breaking +/// changes in non-major versions. We may add new methods in the future that cause +/// existing derived classes to break. +/// +public interface IAdminService +{ + IAdminService WithOptions(Func modifier); + + IUserConnectionService UserConnections { get; } + + IAuthProviderService AuthProviders { get; } + + ISecretService Secrets { get; } +} diff --git a/src/ArcadeDotnet/Services/IAuthService.cs b/src/ArcadeDotnet/Services/IAuthService.cs new file mode 100644 index 0000000..e485917 --- /dev/null +++ b/src/ArcadeDotnet/Services/IAuthService.cs @@ -0,0 +1,44 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Models; +using ArcadeDotnet.Models.Auth; + +namespace ArcadeDotnet.Services; + +/// +/// NOTE: Do not inherit from this type outside the SDK unless you're okay with breaking +/// changes in non-major versions. We may add new methods in the future that cause +/// existing derived classes to break. +/// +public interface IAuthService +{ + IAuthService WithOptions(Func modifier); + + /// + /// Starts the authorization process for given authorization requirements + /// + Task Authorize( + AuthAuthorizeParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Confirms a user's details during an authorization flow + /// + Task ConfirmUser( + AuthConfirmUserParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Checks the status of an ongoing authorization process for a specific tool. + /// If 'wait' param is present, does not respond until either the auth status + /// becomes completed or the timeout is reached. + /// + Task Status( + AuthStatusParams parameters, + CancellationToken cancellationToken = default + ); +} diff --git a/src/ArcadeDotnet/Services/IChatService.cs b/src/ArcadeDotnet/Services/IChatService.cs new file mode 100644 index 0000000..7256f52 --- /dev/null +++ b/src/ArcadeDotnet/Services/IChatService.cs @@ -0,0 +1,17 @@ +using System; +using ArcadeDotnet.Core; +using ArcadeDotnet.Services.Chat; + +namespace ArcadeDotnet.Services; + +/// +/// NOTE: Do not inherit from this type outside the SDK unless you're okay with breaking +/// changes in non-major versions. We may add new methods in the future that cause +/// existing derived classes to break. +/// +public interface IChatService +{ + IChatService WithOptions(Func modifier); + + ICompletionService Completions { get; } +} diff --git a/src/ArcadeDotnet/Services/IHealthService.cs b/src/ArcadeDotnet/Services/IHealthService.cs new file mode 100644 index 0000000..97e4a91 --- /dev/null +++ b/src/ArcadeDotnet/Services/IHealthService.cs @@ -0,0 +1,25 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Models.Health; + +namespace ArcadeDotnet.Services; + +/// +/// NOTE: Do not inherit from this type outside the SDK unless you're okay with breaking +/// changes in non-major versions. We may add new methods in the future that cause +/// existing derived classes to break. +/// +public interface IHealthService +{ + IHealthService WithOptions(Func modifier); + + /// + /// Check if Arcade Engine is healthy + /// + Task Check( + HealthCheckParams? parameters = null, + CancellationToken cancellationToken = default + ); +} diff --git a/src/ArcadeDotnet/Services/IToolService.cs b/src/ArcadeDotnet/Services/IToolService.cs new file mode 100644 index 0000000..1714547 --- /dev/null +++ b/src/ArcadeDotnet/Services/IToolService.cs @@ -0,0 +1,65 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Models; +using ArcadeDotnet.Models.Tools; +using ArcadeDotnet.Services.Tools; + +namespace ArcadeDotnet.Services; + +/// +/// NOTE: Do not inherit from this type outside the SDK unless you're okay with breaking +/// changes in non-major versions. We may add new methods in the future that cause +/// existing derived classes to break. +/// +public interface IToolService +{ + IToolService WithOptions(Func modifier); + + IScheduledService Scheduled { get; } + + IFormattedService Formatted { get; } + + /// + /// Returns a page of tools from the engine configuration, optionally filtered + /// by toolkit + /// + Task List( + ToolListParams? parameters = null, + CancellationToken cancellationToken = default + ); + + /// + /// Authorizes a user for a specific tool by name + /// + Task Authorize( + ToolAuthorizeParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Executes a tool by name and arguments + /// + Task Execute( + ToolExecuteParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Returns the arcade tool specification for a specific tool + /// + Task Get( + ToolGetParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Returns the arcade tool specification for a specific tool + /// + Task Get( + string name, + ToolGetParams? parameters = null, + CancellationToken cancellationToken = default + ); +} diff --git a/src/ArcadeDotnet/Services/IWorkerService.cs b/src/ArcadeDotnet/Services/IWorkerService.cs new file mode 100644 index 0000000..77413b4 --- /dev/null +++ b/src/ArcadeDotnet/Services/IWorkerService.cs @@ -0,0 +1,115 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Models.Workers; + +namespace ArcadeDotnet.Services; + +/// +/// NOTE: Do not inherit from this type outside the SDK unless you're okay with breaking +/// changes in non-major versions. We may add new methods in the future that cause +/// existing derived classes to break. +/// +public interface IWorkerService +{ + IWorkerService WithOptions(Func modifier); + + /// + /// Create a worker + /// + Task Create( + WorkerCreateParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Update a worker + /// + Task Update( + WorkerUpdateParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Update a worker + /// + Task Update( + string id, + WorkerUpdateParams? parameters = null, + CancellationToken cancellationToken = default + ); + + /// + /// List all workers with their definitions + /// + Task List( + WorkerListParams? parameters = null, + CancellationToken cancellationToken = default + ); + + /// + /// Delete a worker + /// + Task Delete(WorkerDeleteParams parameters, CancellationToken cancellationToken = default); + + /// + /// Delete a worker + /// + Task Delete( + string id, + WorkerDeleteParams? parameters = null, + CancellationToken cancellationToken = default + ); + + /// + /// Get a worker by ID + /// + Task Get( + WorkerGetParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Get a worker by ID + /// + Task Get( + string id, + WorkerGetParams? parameters = null, + CancellationToken cancellationToken = default + ); + + /// + /// Get the health of a worker + /// + Task Health( + WorkerHealthParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Get the health of a worker + /// + Task Health( + string id, + WorkerHealthParams? parameters = null, + CancellationToken cancellationToken = default + ); + + /// + /// Returns a page of tools + /// + Task Tools( + WorkerToolsParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Returns a page of tools + /// + Task Tools( + string id, + WorkerToolsParams? parameters = null, + CancellationToken cancellationToken = default + ); +} diff --git a/src/ArcadeDotnet/Services/ToolService.cs b/src/ArcadeDotnet/Services/ToolService.cs new file mode 100644 index 0000000..a928fec --- /dev/null +++ b/src/ArcadeDotnet/Services/ToolService.cs @@ -0,0 +1,146 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Exceptions; +using ArcadeDotnet.Models; +using ArcadeDotnet.Models.Tools; +using ArcadeDotnet.Services.Tools; + +namespace ArcadeDotnet.Services; + +public sealed class ToolService : IToolService +{ + public IToolService WithOptions(Func modifier) + { + return new ToolService(this._client.WithOptions(modifier)); + } + + readonly IArcadeClient _client; + + public ToolService(IArcadeClient client) + { + _client = client; + _scheduled = new(() => new ScheduledService(client)); + _formatted = new(() => new FormattedService(client)); + } + + readonly Lazy _scheduled; + public IScheduledService Scheduled + { + get { return _scheduled.Value; } + } + + readonly Lazy _formatted; + public IFormattedService Formatted + { + get { return _formatted.Value; } + } + + public async Task List( + ToolListParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var page = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + page.Validate(); + } + return page; + } + + public async Task Authorize( + ToolAuthorizeParams parameters, + CancellationToken cancellationToken = default + ) + { + HttpRequest request = new() + { + Method = HttpMethod.Post, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var authorizationResponse = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + authorizationResponse.Validate(); + } + return authorizationResponse; + } + + public async Task Execute( + ToolExecuteParams parameters, + CancellationToken cancellationToken = default + ) + { + HttpRequest request = new() + { + Method = HttpMethod.Post, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var executeToolResponse = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + executeToolResponse.Validate(); + } + return executeToolResponse; + } + + public async Task Get( + ToolGetParams parameters, + CancellationToken cancellationToken = default + ) + { + if (parameters.Name == null) + { + throw new ArcadeInvalidDataException("'parameters.Name' cannot be null"); + } + + HttpRequest request = new() { Method = HttpMethod.Get, Params = parameters }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var toolDefinition = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + toolDefinition.Validate(); + } + return toolDefinition; + } + + public async Task Get( + string name, + ToolGetParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + return await this.Get(parameters with { Name = name }, cancellationToken); + } +} diff --git a/src/ArcadeDotnet/Services/Tools/Formatted/FormattedService.cs b/src/ArcadeDotnet/Services/Tools/Formatted/FormattedService.cs deleted file mode 100644 index 5f80e74..0000000 --- a/src/ArcadeDotnet/Services/Tools/Formatted/FormattedService.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Net.Http; -using System.Text.Json; -using System.Threading.Tasks; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Tools.Formatted; - -namespace ArcadeDotnet.Services.Tools.Formatted; - -public sealed class FormattedService : IFormattedService -{ - readonly IArcadeClient _client; - - public FormattedService(IArcadeClient client) - { - _client = client; - } - - public async Task List(FormattedListParams? parameters = null) - { - parameters ??= new(); - - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Get(FormattedGetParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } -} diff --git a/src/ArcadeDotnet/Services/Tools/Formatted/IFormattedService.cs b/src/ArcadeDotnet/Services/Tools/Formatted/IFormattedService.cs deleted file mode 100644 index 35b19dd..0000000 --- a/src/ArcadeDotnet/Services/Tools/Formatted/IFormattedService.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Text.Json; -using System.Threading.Tasks; -using ArcadeDotnet.Models.Tools.Formatted; - -namespace ArcadeDotnet.Services.Tools.Formatted; - -public interface IFormattedService -{ - /// - /// Returns a page of tools from the engine configuration, optionally filtered - /// by toolkit, formatted for a specific provider - /// - Task List(FormattedListParams? parameters = null); - - /// - /// Returns the formatted tool specification for a specific tool, given a provider - /// - Task Get(FormattedGetParams parameters); -} diff --git a/src/ArcadeDotnet/Services/Tools/FormattedService.cs b/src/ArcadeDotnet/Services/Tools/FormattedService.cs new file mode 100644 index 0000000..55e322a --- /dev/null +++ b/src/ArcadeDotnet/Services/Tools/FormattedService.cs @@ -0,0 +1,82 @@ +using System; +using System.Net.Http; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Exceptions; +using ArcadeDotnet.Models.Tools.Formatted; + +namespace ArcadeDotnet.Services.Tools; + +public sealed class FormattedService : IFormattedService +{ + public IFormattedService WithOptions(Func modifier) + { + return new FormattedService(this._client.WithOptions(modifier)); + } + + readonly IArcadeClient _client; + + public FormattedService(IArcadeClient client) + { + _client = client; + } + + public async Task List( + FormattedListParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var page = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + page.Validate(); + } + return page; + } + + public async Task Get( + FormattedGetParams parameters, + CancellationToken cancellationToken = default + ) + { + if (parameters.Name == null) + { + throw new ArcadeInvalidDataException("'parameters.Name' cannot be null"); + } + + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + return await response.Deserialize(cancellationToken).ConfigureAwait(false); + } + + public async Task Get( + string name, + FormattedGetParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + return await this.Get(parameters with { Name = name }, cancellationToken); + } +} diff --git a/src/ArcadeDotnet/Services/Tools/IFormattedService.cs b/src/ArcadeDotnet/Services/Tools/IFormattedService.cs new file mode 100644 index 0000000..670c5fe --- /dev/null +++ b/src/ArcadeDotnet/Services/Tools/IFormattedService.cs @@ -0,0 +1,44 @@ +using System; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Models.Tools.Formatted; + +namespace ArcadeDotnet.Services.Tools; + +/// +/// NOTE: Do not inherit from this type outside the SDK unless you're okay with breaking +/// changes in non-major versions. We may add new methods in the future that cause +/// existing derived classes to break. +/// +public interface IFormattedService +{ + IFormattedService WithOptions(Func modifier); + + /// + /// Returns a page of tools from the engine configuration, optionally filtered + /// by toolkit, formatted for a specific provider + /// + Task List( + FormattedListParams? parameters = null, + CancellationToken cancellationToken = default + ); + + /// + /// Returns the formatted tool specification for a specific tool, given a provider + /// + Task Get( + FormattedGetParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Returns the formatted tool specification for a specific tool, given a provider + /// + Task Get( + string name, + FormattedGetParams? parameters = null, + CancellationToken cancellationToken = default + ); +} diff --git a/src/ArcadeDotnet/Services/Tools/IScheduledService.cs b/src/ArcadeDotnet/Services/Tools/IScheduledService.cs new file mode 100644 index 0000000..5dbbbb8 --- /dev/null +++ b/src/ArcadeDotnet/Services/Tools/IScheduledService.cs @@ -0,0 +1,42 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Models.Tools.Scheduled; + +namespace ArcadeDotnet.Services.Tools; + +/// +/// NOTE: Do not inherit from this type outside the SDK unless you're okay with breaking +/// changes in non-major versions. We may add new methods in the future that cause +/// existing derived classes to break. +/// +public interface IScheduledService +{ + IScheduledService WithOptions(Func modifier); + + /// + /// Returns a page of scheduled tool executions + /// + Task List( + ScheduledListParams? parameters = null, + CancellationToken cancellationToken = default + ); + + /// + /// Returns the details for a specific scheduled tool execution + /// + Task Get( + ScheduledGetParams parameters, + CancellationToken cancellationToken = default + ); + + /// + /// Returns the details for a specific scheduled tool execution + /// + Task Get( + string id, + ScheduledGetParams? parameters = null, + CancellationToken cancellationToken = default + ); +} diff --git a/src/ArcadeDotnet/Services/Tools/IToolService.cs b/src/ArcadeDotnet/Services/Tools/IToolService.cs deleted file mode 100644 index 43269a9..0000000 --- a/src/ArcadeDotnet/Services/Tools/IToolService.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Threading.Tasks; -using ArcadeDotnet.Models; -using ArcadeDotnet.Models.Tools; -using ArcadeDotnet.Services.Tools.Formatted; -using ArcadeDotnet.Services.Tools.Scheduled; - -namespace ArcadeDotnet.Services.Tools; - -public interface IToolService -{ - IScheduledService Scheduled { get; } - - IFormattedService Formatted { get; } - - /// - /// Returns a page of tools from the engine configuration, optionally filtered - /// by toolkit - /// - Task List(ToolListParams? parameters = null); - - /// - /// Authorizes a user for a specific tool by name - /// - Task Authorize(ToolAuthorizeParams parameters); - - /// - /// Executes a tool by name and arguments - /// - Task Execute(ToolExecuteParams parameters); - - /// - /// Returns the arcade tool specification for a specific tool - /// - Task Get(ToolGetParams parameters); -} diff --git a/src/ArcadeDotnet/Services/Tools/Scheduled/IScheduledService.cs b/src/ArcadeDotnet/Services/Tools/Scheduled/IScheduledService.cs deleted file mode 100644 index 68ece55..0000000 --- a/src/ArcadeDotnet/Services/Tools/Scheduled/IScheduledService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Threading.Tasks; -using ArcadeDotnet.Models.Tools.Scheduled; - -namespace ArcadeDotnet.Services.Tools.Scheduled; - -public interface IScheduledService -{ - /// - /// Returns a page of scheduled tool executions - /// - Task List(ScheduledListParams? parameters = null); - - /// - /// Returns the details for a specific scheduled tool execution - /// - Task Get(ScheduledGetParams parameters); -} diff --git a/src/ArcadeDotnet/Services/Tools/Scheduled/ScheduledService.cs b/src/ArcadeDotnet/Services/Tools/Scheduled/ScheduledService.cs deleted file mode 100644 index 3f333a0..0000000 --- a/src/ArcadeDotnet/Services/Tools/Scheduled/ScheduledService.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Net.Http; -using System.Threading.Tasks; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Tools.Scheduled; - -namespace ArcadeDotnet.Services.Tools.Scheduled; - -public sealed class ScheduledService : IScheduledService -{ - readonly IArcadeClient _client; - - public ScheduledService(IArcadeClient client) - { - _client = client; - } - - public async Task List(ScheduledListParams? parameters = null) - { - parameters ??= new(); - - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Get(ScheduledGetParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } -} diff --git a/src/ArcadeDotnet/Services/Tools/ScheduledService.cs b/src/ArcadeDotnet/Services/Tools/ScheduledService.cs new file mode 100644 index 0000000..ba056dd --- /dev/null +++ b/src/ArcadeDotnet/Services/Tools/ScheduledService.cs @@ -0,0 +1,88 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Exceptions; +using ArcadeDotnet.Models.Tools.Scheduled; + +namespace ArcadeDotnet.Services.Tools; + +public sealed class ScheduledService : IScheduledService +{ + public IScheduledService WithOptions(Func modifier) + { + return new ScheduledService(this._client.WithOptions(modifier)); + } + + readonly IArcadeClient _client; + + public ScheduledService(IArcadeClient client) + { + _client = client; + } + + public async Task List( + ScheduledListParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var page = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + page.Validate(); + } + return page; + } + + public async Task Get( + ScheduledGetParams parameters, + CancellationToken cancellationToken = default + ) + { + if (parameters.ID == null) + { + throw new ArcadeInvalidDataException("'parameters.ID' cannot be null"); + } + + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var scheduled = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + scheduled.Validate(); + } + return scheduled; + } + + public async Task Get( + string id, + ScheduledGetParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + return await this.Get(parameters with { ID = id }, cancellationToken); + } +} diff --git a/src/ArcadeDotnet/Services/Tools/ToolService.cs b/src/ArcadeDotnet/Services/Tools/ToolService.cs deleted file mode 100644 index e72c699..0000000 --- a/src/ArcadeDotnet/Services/Tools/ToolService.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System; -using System.Net.Http; -using System.Threading.Tasks; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models; -using ArcadeDotnet.Models.Tools; -using ArcadeDotnet.Services.Tools.Formatted; -using ArcadeDotnet.Services.Tools.Scheduled; - -namespace ArcadeDotnet.Services.Tools; - -public sealed class ToolService : IToolService -{ - readonly IArcadeClient _client; - - public ToolService(IArcadeClient client) - { - _client = client; - _scheduled = new(() => new ScheduledService(client)); - _formatted = new(() => new FormattedService(client)); - } - - readonly Lazy _scheduled; - public IScheduledService Scheduled - { - get { return _scheduled.Value; } - } - - readonly Lazy _formatted; - public IFormattedService Formatted - { - get { return _formatted.Value; } - } - - public async Task List(ToolListParams? parameters = null) - { - parameters ??= new(); - - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Authorize(ToolAuthorizeParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Post, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Execute(ToolExecuteParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Post, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Get(ToolGetParams parameters) - { - HttpRequest request = new() { Method = HttpMethod.Get, Params = parameters }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } -} diff --git a/src/ArcadeDotnet/Services/WorkerService.cs b/src/ArcadeDotnet/Services/WorkerService.cs new file mode 100644 index 0000000..3a3431b --- /dev/null +++ b/src/ArcadeDotnet/Services/WorkerService.cs @@ -0,0 +1,259 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using ArcadeDotnet.Core; +using ArcadeDotnet.Exceptions; +using ArcadeDotnet.Models.Workers; + +namespace ArcadeDotnet.Services; + +public sealed class WorkerService : IWorkerService +{ + public IWorkerService WithOptions(Func modifier) + { + return new WorkerService(this._client.WithOptions(modifier)); + } + + readonly IArcadeClient _client; + + public WorkerService(IArcadeClient client) + { + _client = client; + } + + public async Task Create( + WorkerCreateParams parameters, + CancellationToken cancellationToken = default + ) + { + HttpRequest request = new() + { + Method = HttpMethod.Post, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var workerResponse = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + workerResponse.Validate(); + } + return workerResponse; + } + + public async Task Update( + WorkerUpdateParams parameters, + CancellationToken cancellationToken = default + ) + { + if (parameters.ID == null) + { + throw new ArcadeInvalidDataException("'parameters.ID' cannot be null"); + } + + HttpRequest request = new() + { + Method = HttpMethod.Patch, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var workerResponse = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + workerResponse.Validate(); + } + return workerResponse; + } + + public async Task Update( + string id, + WorkerUpdateParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + return await this.Update(parameters with { ID = id }, cancellationToken); + } + + public async Task List( + WorkerListParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var page = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + page.Validate(); + } + return page; + } + + public async Task Delete( + WorkerDeleteParams parameters, + CancellationToken cancellationToken = default + ) + { + if (parameters.ID == null) + { + throw new ArcadeInvalidDataException("'parameters.ID' cannot be null"); + } + + HttpRequest request = new() + { + Method = HttpMethod.Delete, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + } + + public async Task Delete( + string id, + WorkerDeleteParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + await this.Delete(parameters with { ID = id }, cancellationToken); + } + + public async Task Get( + WorkerGetParams parameters, + CancellationToken cancellationToken = default + ) + { + if (parameters.ID == null) + { + throw new ArcadeInvalidDataException("'parameters.ID' cannot be null"); + } + + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var workerResponse = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + workerResponse.Validate(); + } + return workerResponse; + } + + public async Task Get( + string id, + WorkerGetParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + return await this.Get(parameters with { ID = id }, cancellationToken); + } + + public async Task Health( + WorkerHealthParams parameters, + CancellationToken cancellationToken = default + ) + { + if (parameters.ID == null) + { + throw new ArcadeInvalidDataException("'parameters.ID' cannot be null"); + } + + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var workerHealthResponse = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + workerHealthResponse.Validate(); + } + return workerHealthResponse; + } + + public async Task Health( + string id, + WorkerHealthParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + return await this.Health(parameters with { ID = id }, cancellationToken); + } + + public async Task Tools( + WorkerToolsParams parameters, + CancellationToken cancellationToken = default + ) + { + if (parameters.ID == null) + { + throw new ArcadeInvalidDataException("'parameters.ID' cannot be null"); + } + + HttpRequest request = new() + { + Method = HttpMethod.Get, + Params = parameters, + }; + using var response = await this + ._client.Execute(request, cancellationToken) + .ConfigureAwait(false); + var page = await response + .Deserialize(cancellationToken) + .ConfigureAwait(false); + if (this._client.ResponseValidation) + { + page.Validate(); + } + return page; + } + + public async Task Tools( + string id, + WorkerToolsParams? parameters = null, + CancellationToken cancellationToken = default + ) + { + parameters ??= new(); + + return await this.Tools(parameters with { ID = id }, cancellationToken); + } +} diff --git a/src/ArcadeDotnet/Services/Workers/IWorkerService.cs b/src/ArcadeDotnet/Services/Workers/IWorkerService.cs deleted file mode 100644 index b448c35..0000000 --- a/src/ArcadeDotnet/Services/Workers/IWorkerService.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Threading.Tasks; -using ArcadeDotnet.Models.Workers; - -namespace ArcadeDotnet.Services.Workers; - -public interface IWorkerService -{ - /// - /// Create a worker - /// - Task Create(WorkerCreateParams parameters); - - /// - /// Update a worker - /// - Task Update(WorkerUpdateParams parameters); - - /// - /// List all workers with their definitions - /// - Task List(WorkerListParams? parameters = null); - - /// - /// Delete a worker - /// - Task Delete(WorkerDeleteParams parameters); - - /// - /// Get a worker by ID - /// - Task Get(WorkerGetParams parameters); - - /// - /// Get the health of a worker - /// - Task Health(WorkerHealthParams parameters); - - /// - /// Returns a page of tools - /// - Task Tools(WorkerToolsParams parameters); -} diff --git a/src/ArcadeDotnet/Services/Workers/WorkerService.cs b/src/ArcadeDotnet/Services/Workers/WorkerService.cs deleted file mode 100644 index 6a90c28..0000000 --- a/src/ArcadeDotnet/Services/Workers/WorkerService.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System.Net.Http; -using System.Threading.Tasks; -using ArcadeDotnet.Core; -using ArcadeDotnet.Models.Workers; - -namespace ArcadeDotnet.Services.Workers; - -public sealed class WorkerService : IWorkerService -{ - readonly IArcadeClient _client; - - public WorkerService(IArcadeClient client) - { - _client = client; - } - - public async Task Create(WorkerCreateParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Post, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Update(WorkerUpdateParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Patch, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task List(WorkerListParams? parameters = null) - { - parameters ??= new(); - - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Delete(WorkerDeleteParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Delete, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return; - } - - public async Task Get(WorkerGetParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Health(WorkerHealthParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } - - public async Task Tools(WorkerToolsParams parameters) - { - HttpRequest request = new() - { - Method = HttpMethod.Get, - Params = parameters, - }; - using var response = await this._client.Execute(request).ConfigureAwait(false); - return await response.Deserialize().ConfigureAwait(false); - } -}