diff --git a/src/Docker.DotNet/Base64Converter.cs b/src/Docker.DotNet/Base64Converter.cs deleted file mode 100644 index 1b2a37ea..00000000 --- a/src/Docker.DotNet/Base64Converter.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Docker.DotNet; - -internal class Base64Converter : JsonConverter> -{ - public override IList Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - return reader.GetBytesFromBase64(); - } - - public override void Write(Utf8JsonWriter writer, IList value, JsonSerializerOptions options) - { - writer.WriteBase64StringValue(value.ToArray()); - } -} \ No newline at end of file diff --git a/src/Docker.DotNet/ConsoleSizeConverter.cs b/src/Docker.DotNet/JsonConsoleSizeConverter.cs similarity index 95% rename from src/Docker.DotNet/ConsoleSizeConverter.cs rename to src/Docker.DotNet/JsonConsoleSizeConverter.cs index feae98d3..cb3fa67d 100644 --- a/src/Docker.DotNet/ConsoleSizeConverter.cs +++ b/src/Docker.DotNet/JsonConsoleSizeConverter.cs @@ -1,6 +1,6 @@ namespace Docker.DotNet; -internal sealed class ConsoleSizeConverter : JsonConverter +internal sealed class JsonConsoleSizeConverter : JsonConverter { public override ConsoleSize? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { diff --git a/src/Docker.DotNet/JsonNullableDateTimeConverter.cs b/src/Docker.DotNet/JsonNullableDateTimeConverter.cs deleted file mode 100644 index fa92a113..00000000 --- a/src/Docker.DotNet/JsonNullableDateTimeConverter.cs +++ /dev/null @@ -1,33 +0,0 @@ -namespace Docker.DotNet; - -internal sealed class JsonNullableDateTimeConverter : JsonConverter -{ - private static readonly DateTime UnixEpochBase = new(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); - - public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - switch (reader.TokenType) - { - case JsonTokenType.Null: - return null; - case JsonTokenType.Number: - return UnixEpochBase.AddSeconds(reader.GetInt64()); - case JsonTokenType.String: - return reader.GetDateTime(); - default: - throw new NotImplementedException($"Deserializing JSON '{reader.TokenType}' to DateTime is not handled."); - } - } - - public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options) - { - if (value.HasValue) - { - writer.WriteStringValue(value.Value.ToString("O")); - } - else - { - writer.WriteNullValue(); - } - } -} \ No newline at end of file diff --git a/src/Docker.DotNet/JsonSerializer.cs b/src/Docker.DotNet/JsonSerializer.cs index 87e11f9b..dca130a7 100644 --- a/src/Docker.DotNet/JsonSerializer.cs +++ b/src/Docker.DotNet/JsonSerializer.cs @@ -19,7 +19,7 @@ private JsonSerializer() _options.Converters.Add(new JsonEnumMemberConverter()); _options.Converters.Add(new JsonEnumMemberConverter()); _options.Converters.Add(new JsonDateTimeConverter()); - _options.Converters.Add(new JsonNullableDateTimeConverter()); + _options.Converters.Add(new JsonTimeSpanNanosecondsConverter()); } public static JsonSerializer Instance { get; } diff --git a/src/Docker.DotNet/JsonTimeSpanNanosecondsConverter.cs b/src/Docker.DotNet/JsonTimeSpanNanosecondsConverter.cs new file mode 100644 index 00000000..6914d3fd --- /dev/null +++ b/src/Docker.DotNet/JsonTimeSpanNanosecondsConverter.cs @@ -0,0 +1,17 @@ +namespace Docker.DotNet; + +internal sealed class JsonTimeSpanNanosecondsConverter : JsonConverter +{ + private const int NanosecondsPerTick = 100; + + public override TimeSpan Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var valueInNanoseconds = reader.GetInt64(); + return TimeSpan.FromTicks(valueInNanoseconds / NanosecondsPerTick); + } + + public override void Write(Utf8JsonWriter writer, TimeSpan timeSpan, JsonSerializerOptions options) + { + writer.WriteNumberValue(timeSpan.Ticks * NanosecondsPerTick); + } +} \ No newline at end of file diff --git a/src/Docker.DotNet/JsonTimeSpanSecondsConverter.cs b/src/Docker.DotNet/JsonTimeSpanSecondsConverter.cs new file mode 100644 index 00000000..f57657ee --- /dev/null +++ b/src/Docker.DotNet/JsonTimeSpanSecondsConverter.cs @@ -0,0 +1,14 @@ +namespace Docker.DotNet; + +internal sealed class JsonTimeSpanSecondsConverter : JsonConverter +{ + public override TimeSpan Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return TimeSpan.FromSeconds(reader.GetInt64()); + } + + public override void Write(Utf8JsonWriter writer, TimeSpan value, JsonSerializerOptions options) + { + writer.WriteNumberValue((long)value.TotalSeconds); + } +} \ No newline at end of file diff --git a/src/Docker.DotNet/Models/CAConfig.Generated.cs b/src/Docker.DotNet/Models/CAConfig.Generated.cs index 5b528984..ae9357b9 100644 --- a/src/Docker.DotNet/Models/CAConfig.Generated.cs +++ b/src/Docker.DotNet/Models/CAConfig.Generated.cs @@ -4,7 +4,7 @@ namespace Docker.DotNet.Models public class CAConfig // (swarm.CAConfig) { [JsonPropertyName("NodeCertExpiry")] - public long? NodeCertExpiry { get; set; } + public TimeSpan? NodeCertExpiry { get; set; } [JsonPropertyName("ExternalCAs")] public IList? ExternalCAs { get; set; } diff --git a/src/Docker.DotNet/Models/CommitContainerChangesParameters.Generated.cs b/src/Docker.DotNet/Models/CommitContainerChangesParameters.Generated.cs index de1e14dc..340be0d6 100644 --- a/src/Docker.DotNet/Models/CommitContainerChangesParameters.Generated.cs +++ b/src/Docker.DotNet/Models/CommitContainerChangesParameters.Generated.cs @@ -53,10 +53,10 @@ public CommitContainerChangesParameters(ContainerConfig Config) [QueryStringParameter("author", false)] public string? Author { get; set; } - [QueryStringParameter("changes", false, typeof(EnumerableQueryStringConverter))] + [QueryStringParameter("changes", false, typeof(QueryStringEnumerableConverter))] public IList? Changes { get; set; } - [QueryStringParameter("pause", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("pause", false, typeof(QueryStringBoolConverter))] public bool? Pause { get; set; } [JsonPropertyName("Hostname")] @@ -126,7 +126,7 @@ public CommitContainerChangesParameters(ContainerConfig Config) public string? StopSignal { get; set; } [JsonPropertyName("StopTimeout")] - [JsonConverter(typeof(TimeSpanSecondsConverter))] + [JsonConverter(typeof(JsonTimeSpanSecondsConverter))] public TimeSpan? StopTimeout { get; set; } [JsonPropertyName("Shell")] diff --git a/src/Docker.DotNet/Models/ContainerAttachParameters.Generated.cs b/src/Docker.DotNet/Models/ContainerAttachParameters.Generated.cs index 536058c3..2dead30f 100644 --- a/src/Docker.DotNet/Models/ContainerAttachParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ContainerAttachParameters.Generated.cs @@ -3,22 +3,22 @@ namespace Docker.DotNet.Models { public class ContainerAttachParameters // (main.ContainerAttachParameters) { - [QueryStringParameter("stream", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("stream", false, typeof(QueryStringBoolConverter))] public bool? Stream { get; set; } - [QueryStringParameter("stdin", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("stdin", false, typeof(QueryStringBoolConverter))] public bool? Stdin { get; set; } - [QueryStringParameter("stdout", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("stdout", false, typeof(QueryStringBoolConverter))] public bool? Stdout { get; set; } - [QueryStringParameter("stderr", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("stderr", false, typeof(QueryStringBoolConverter))] public bool? Stderr { get; set; } [QueryStringParameter("detachKeys", false)] public string? DetachKeys { get; set; } - [QueryStringParameter("logs", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("logs", false, typeof(QueryStringBoolConverter))] public bool? Logs { get; set; } } } diff --git a/src/Docker.DotNet/Models/ContainerConfig.Generated.cs b/src/Docker.DotNet/Models/ContainerConfig.Generated.cs index 30171446..7442110f 100644 --- a/src/Docker.DotNet/Models/ContainerConfig.Generated.cs +++ b/src/Docker.DotNet/Models/ContainerConfig.Generated.cs @@ -70,7 +70,7 @@ public class ContainerConfig // (container.Config) public string? StopSignal { get; set; } [JsonPropertyName("StopTimeout")] - [JsonConverter(typeof(TimeSpanSecondsConverter))] + [JsonConverter(typeof(JsonTimeSpanSecondsConverter))] public TimeSpan? StopTimeout { get; set; } [JsonPropertyName("Shell")] diff --git a/src/Docker.DotNet/Models/ContainerEventsParameters.Generated.cs b/src/Docker.DotNet/Models/ContainerEventsParameters.Generated.cs index 7214bcc7..5f216e05 100644 --- a/src/Docker.DotNet/Models/ContainerEventsParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ContainerEventsParameters.Generated.cs @@ -9,7 +9,7 @@ public class ContainerEventsParameters // (main.ContainerEventsParameters) [QueryStringParameter("until", false)] public string? Until { get; set; } - [QueryStringParameter("filters", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("filters", false, typeof(QueryStringMapConverter))] public IDictionary>? Filters { get; set; } } } diff --git a/src/Docker.DotNet/Models/ContainerExecCreateParameters.Generated.cs b/src/Docker.DotNet/Models/ContainerExecCreateParameters.Generated.cs index ed597b84..bf140474 100644 --- a/src/Docker.DotNet/Models/ContainerExecCreateParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ContainerExecCreateParameters.Generated.cs @@ -13,7 +13,7 @@ public class ContainerExecCreateParameters // (main.ContainerExecCreateParameter public bool TTY { get; set; } = default!; [JsonPropertyName("ConsoleSize")] - [JsonConverter(typeof(ConsoleSizeConverter))] + [JsonConverter(typeof(JsonConsoleSizeConverter))] public ConsoleSize ConsoleSize { get; set; } = default!; [JsonPropertyName("AttachStdin")] diff --git a/src/Docker.DotNet/Models/ContainerExecStartParameters.Generated.cs b/src/Docker.DotNet/Models/ContainerExecStartParameters.Generated.cs index 5b496006..83c67007 100644 --- a/src/Docker.DotNet/Models/ContainerExecStartParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ContainerExecStartParameters.Generated.cs @@ -10,7 +10,7 @@ public class ContainerExecStartParameters // (main.ContainerExecStartParameters) public bool TTY { get; set; } = default!; [JsonPropertyName("ConsoleSize")] - [JsonConverter(typeof(ConsoleSizeConverter))] + [JsonConverter(typeof(JsonConsoleSizeConverter))] public ConsoleSize ConsoleSize { get; set; } = default!; } } diff --git a/src/Docker.DotNet/Models/ContainerInspectParameters.Generated.cs b/src/Docker.DotNet/Models/ContainerInspectParameters.Generated.cs index 9da5c347..970c0d1a 100644 --- a/src/Docker.DotNet/Models/ContainerInspectParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ContainerInspectParameters.Generated.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet.Models { public class ContainerInspectParameters // (main.ContainerInspectParameters) { - [QueryStringParameter("size", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("size", false, typeof(QueryStringBoolConverter))] public bool? IncludeSize { get; set; } } } diff --git a/src/Docker.DotNet/Models/ContainerLogsParameters.Generated.cs b/src/Docker.DotNet/Models/ContainerLogsParameters.Generated.cs index 32c8e832..19b97809 100644 --- a/src/Docker.DotNet/Models/ContainerLogsParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ContainerLogsParameters.Generated.cs @@ -3,10 +3,10 @@ namespace Docker.DotNet.Models { public class ContainerLogsParameters // (main.ContainerLogsParameters) { - [QueryStringParameter("stdout", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("stdout", false, typeof(QueryStringBoolConverter))] public bool? ShowStdout { get; set; } - [QueryStringParameter("stderr", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("stderr", false, typeof(QueryStringBoolConverter))] public bool? ShowStderr { get; set; } [QueryStringParameter("since", false)] @@ -15,10 +15,10 @@ public class ContainerLogsParameters // (main.ContainerLogsParameters) [QueryStringParameter("until", false)] public string? Until { get; set; } - [QueryStringParameter("timestamps", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("timestamps", false, typeof(QueryStringBoolConverter))] public bool? Timestamps { get; set; } - [QueryStringParameter("follow", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("follow", false, typeof(QueryStringBoolConverter))] public bool? Follow { get; set; } [QueryStringParameter("tail", false)] diff --git a/src/Docker.DotNet/Models/ContainerRemoveParameters.Generated.cs b/src/Docker.DotNet/Models/ContainerRemoveParameters.Generated.cs index 861ab467..cbd6b01d 100644 --- a/src/Docker.DotNet/Models/ContainerRemoveParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ContainerRemoveParameters.Generated.cs @@ -3,13 +3,13 @@ namespace Docker.DotNet.Models { public class ContainerRemoveParameters // (main.ContainerRemoveParameters) { - [QueryStringParameter("v", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("v", false, typeof(QueryStringBoolConverter))] public bool? RemoveVolumes { get; set; } - [QueryStringParameter("link", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("link", false, typeof(QueryStringBoolConverter))] public bool? RemoveLinks { get; set; } - [QueryStringParameter("force", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("force", false, typeof(QueryStringBoolConverter))] public bool? Force { get; set; } } } diff --git a/src/Docker.DotNet/Models/ContainerSpec.Generated.cs b/src/Docker.DotNet/Models/ContainerSpec.Generated.cs index 6a365f26..bbbfe32b 100644 --- a/src/Docker.DotNet/Models/ContainerSpec.Generated.cs +++ b/src/Docker.DotNet/Models/ContainerSpec.Generated.cs @@ -52,7 +52,7 @@ public class ContainerSpec // (swarm.ContainerSpec) public IList? Mounts { get; set; } [JsonPropertyName("StopGracePeriod")] - public long? StopGracePeriod { get; set; } + public TimeSpan? StopGracePeriod { get; set; } [JsonPropertyName("Healthcheck")] public HealthcheckConfig? Healthcheck { get; set; } diff --git a/src/Docker.DotNet/Models/ContainerStatsParameters.Generated.cs b/src/Docker.DotNet/Models/ContainerStatsParameters.Generated.cs index 8c00b12d..2fe8bb69 100644 --- a/src/Docker.DotNet/Models/ContainerStatsParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ContainerStatsParameters.Generated.cs @@ -3,10 +3,10 @@ namespace Docker.DotNet.Models { public class ContainerStatsParameters // (main.ContainerStatsParameters) { - [QueryStringParameter("stream", true, typeof(BoolQueryStringConverter))] + [QueryStringParameter("stream", true, typeof(QueryStringBoolConverter))] public bool Stream { get; set; } = true; - [QueryStringParameter("one-shot", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("one-shot", false, typeof(QueryStringBoolConverter))] public bool? OneShot { get; set; } } } diff --git a/src/Docker.DotNet/Models/ContainersListParameters.Generated.cs b/src/Docker.DotNet/Models/ContainersListParameters.Generated.cs index f7573786..8998d1ba 100644 --- a/src/Docker.DotNet/Models/ContainersListParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ContainersListParameters.Generated.cs @@ -3,16 +3,16 @@ namespace Docker.DotNet.Models { public class ContainersListParameters // (main.ContainersListParameters) { - [QueryStringParameter("all", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("all", false, typeof(QueryStringBoolConverter))] public bool? All { get; set; } [QueryStringParameter("limit", false)] public long? Limit { get; set; } - [QueryStringParameter("size", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("size", false, typeof(QueryStringBoolConverter))] public bool? Size { get; set; } - [QueryStringParameter("filters", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("filters", false, typeof(QueryStringMapConverter))] public IDictionary>? Filters { get; set; } } } diff --git a/src/Docker.DotNet/Models/ContainersPruneParameters.Generated.cs b/src/Docker.DotNet/Models/ContainersPruneParameters.Generated.cs index e25de825..43e316da 100644 --- a/src/Docker.DotNet/Models/ContainersPruneParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ContainersPruneParameters.Generated.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet.Models { public class ContainersPruneParameters // (main.ContainersPruneParameters) { - [QueryStringParameter("filters", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("filters", false, typeof(QueryStringMapConverter))] public IDictionary>? Filters { get; set; } } } diff --git a/src/Docker.DotNet/Models/CopyToContainerParameters.Generated.cs b/src/Docker.DotNet/Models/CopyToContainerParameters.Generated.cs index b3e0608c..8ae4bdda 100644 --- a/src/Docker.DotNet/Models/CopyToContainerParameters.Generated.cs +++ b/src/Docker.DotNet/Models/CopyToContainerParameters.Generated.cs @@ -6,10 +6,10 @@ public class CopyToContainerParameters // (main.CopyToContainerParameters) [QueryStringParameter("path", true)] public string Path { get; set; } = default!; - [QueryStringParameter("noOverwriteDirNonDir", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("noOverwriteDirNonDir", false, typeof(QueryStringBoolConverter))] public bool? AllowOverwriteDirWithFile { get; set; } - [QueryStringParameter("copyUIDGID", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("copyUIDGID", false, typeof(QueryStringBoolConverter))] public bool? CopyUIDGID { get; set; } } } diff --git a/src/Docker.DotNet/Models/CreateContainerParameters.Generated.cs b/src/Docker.DotNet/Models/CreateContainerParameters.Generated.cs index 57de8587..061f09b6 100644 --- a/src/Docker.DotNet/Models/CreateContainerParameters.Generated.cs +++ b/src/Docker.DotNet/Models/CreateContainerParameters.Generated.cs @@ -111,7 +111,7 @@ public CreateContainerParameters(ContainerConfig Config) public string? StopSignal { get; set; } [JsonPropertyName("StopTimeout")] - [JsonConverter(typeof(TimeSpanSecondsConverter))] + [JsonConverter(typeof(JsonTimeSpanSecondsConverter))] public TimeSpan? StopTimeout { get; set; } [JsonPropertyName("Shell")] diff --git a/src/Docker.DotNet/Models/Descriptor.Generated.cs b/src/Docker.DotNet/Models/Descriptor.Generated.cs index 15c25b23..0db97280 100644 --- a/src/Docker.DotNet/Models/Descriptor.Generated.cs +++ b/src/Docker.DotNet/Models/Descriptor.Generated.cs @@ -19,8 +19,7 @@ public class Descriptor // (v1.Descriptor) public IDictionary? Annotations { get; set; } [JsonPropertyName("data")] - [JsonConverter(typeof(Base64Converter))] - public IList? Data { get; set; } + public byte[]? Data { get; set; } [JsonPropertyName("platform")] public Platform? Platform { get; set; } diff --git a/src/Docker.DotNet/Models/DispatcherConfig.Generated.cs b/src/Docker.DotNet/Models/DispatcherConfig.Generated.cs index edfb8ce5..bb1898b2 100644 --- a/src/Docker.DotNet/Models/DispatcherConfig.Generated.cs +++ b/src/Docker.DotNet/Models/DispatcherConfig.Generated.cs @@ -4,6 +4,6 @@ namespace Docker.DotNet.Models public class DispatcherConfig // (swarm.DispatcherConfig) { [JsonPropertyName("HeartbeatPeriod")] - public long? HeartbeatPeriod { get; set; } + public TimeSpan? HeartbeatPeriod { get; set; } } } diff --git a/src/Docker.DotNet/Models/HealthcheckConfig.Generated.cs b/src/Docker.DotNet/Models/HealthcheckConfig.Generated.cs index dea555df..cf94bd30 100644 --- a/src/Docker.DotNet/Models/HealthcheckConfig.Generated.cs +++ b/src/Docker.DotNet/Models/HealthcheckConfig.Generated.cs @@ -7,18 +7,16 @@ public class HealthcheckConfig // (v1.HealthcheckConfig) public IList? Test { get; set; } [JsonPropertyName("Interval")] - [JsonConverter(typeof(TimeSpanNanosecondsConverter))] public TimeSpan? Interval { get; set; } [JsonPropertyName("Timeout")] - [JsonConverter(typeof(TimeSpanNanosecondsConverter))] public TimeSpan? Timeout { get; set; } [JsonPropertyName("StartPeriod")] - public long? StartPeriod { get; set; } + public TimeSpan? StartPeriod { get; set; } [JsonPropertyName("StartInterval")] - public long? StartInterval { get; set; } + public TimeSpan? StartInterval { get; set; } [JsonPropertyName("Retries")] public long? Retries { get; set; } diff --git a/src/Docker.DotNet/Models/HostConfig.Generated.cs b/src/Docker.DotNet/Models/HostConfig.Generated.cs index f912cffc..2c6bc3e3 100644 --- a/src/Docker.DotNet/Models/HostConfig.Generated.cs +++ b/src/Docker.DotNet/Models/HostConfig.Generated.cs @@ -71,7 +71,7 @@ public HostConfig(Resources Resources) public IList VolumesFrom { get; set; } = default!; [JsonPropertyName("ConsoleSize")] - [JsonConverter(typeof(ConsoleSizeConverter))] + [JsonConverter(typeof(JsonConsoleSizeConverter))] public ConsoleSize ConsoleSize { get; set; } = default!; [JsonPropertyName("Annotations")] diff --git a/src/Docker.DotNet/Models/ImageBuildParameters.Generated.cs b/src/Docker.DotNet/Models/ImageBuildParameters.Generated.cs index 65d412bb..1ca44c6e 100644 --- a/src/Docker.DotNet/Models/ImageBuildParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ImageBuildParameters.Generated.cs @@ -3,22 +3,22 @@ namespace Docker.DotNet.Models { public class ImageBuildParameters // (main.ImageBuildParameters) { - [QueryStringParameter("t", false, typeof(EnumerableQueryStringConverter))] + [QueryStringParameter("t", false, typeof(QueryStringEnumerableConverter))] public IList? Tags { get; set; } - [QueryStringParameter("q", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("q", false, typeof(QueryStringBoolConverter))] public bool? SuppressOutput { get; set; } [QueryStringParameter("remote", false)] public string? RemoteContext { get; set; } - [QueryStringParameter("nocache", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("nocache", false, typeof(QueryStringBoolConverter))] public bool? NoCache { get; set; } - [QueryStringParameter("rm", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("rm", false, typeof(QueryStringBoolConverter))] public bool? Remove { get; set; } - [QueryStringParameter("forcerm", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("forcerm", false, typeof(QueryStringBoolConverter))] public bool? ForceRemove { get; set; } [QueryStringParameter("pull", false)] @@ -51,19 +51,19 @@ public class ImageBuildParameters // (main.ImageBuildParameters) [QueryStringParameter("dockerfile", false)] public string? Dockerfile { get; set; } - [QueryStringParameter("buildargs", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("buildargs", false, typeof(QueryStringMapConverter))] public IDictionary? BuildArgs { get; set; } - [QueryStringParameter("labels", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("labels", false, typeof(QueryStringMapConverter))] public IDictionary? Labels { get; set; } - [QueryStringParameter("squash", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("squash", false, typeof(QueryStringBoolConverter))] public bool? Squash { get; set; } - [QueryStringParameter("cachefrom", false, typeof(EnumerableQueryStringConverter))] + [QueryStringParameter("cachefrom", false, typeof(QueryStringEnumerableConverter))] public IList? CacheFrom { get; set; } - [QueryStringParameter("extrahosts", false, typeof(EnumerableQueryStringConverter))] + [QueryStringParameter("extrahosts", false, typeof(QueryStringEnumerableConverter))] public IList? ExtraHosts { get; set; } [QueryStringParameter("target", false)] diff --git a/src/Docker.DotNet/Models/ImageDeleteParameters.Generated.cs b/src/Docker.DotNet/Models/ImageDeleteParameters.Generated.cs index fae052ba..5bcf4a6c 100644 --- a/src/Docker.DotNet/Models/ImageDeleteParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ImageDeleteParameters.Generated.cs @@ -3,10 +3,10 @@ namespace Docker.DotNet.Models { public class ImageDeleteParameters // (main.ImageDeleteParameters) { - [QueryStringParameter("force", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("force", false, typeof(QueryStringBoolConverter))] public bool? Force { get; set; } - [QueryStringParameter("noprune", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("noprune", false, typeof(QueryStringBoolConverter))] public bool? NoPrune { get; set; } } } diff --git a/src/Docker.DotNet/Models/ImageLoadParameters.Generated.cs b/src/Docker.DotNet/Models/ImageLoadParameters.Generated.cs index 4b13705a..c1cbf62c 100644 --- a/src/Docker.DotNet/Models/ImageLoadParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ImageLoadParameters.Generated.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet.Models { public class ImageLoadParameters // (main.ImageLoadParameters) { - [QueryStringParameter("quiet", true, typeof(BoolQueryStringConverter))] + [QueryStringParameter("quiet", true, typeof(QueryStringBoolConverter))] public bool Quiet { get; set; } = default!; } } diff --git a/src/Docker.DotNet/Models/ImagesCreateParameters.Generated.cs b/src/Docker.DotNet/Models/ImagesCreateParameters.Generated.cs index 03931b53..3ea125d6 100644 --- a/src/Docker.DotNet/Models/ImagesCreateParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ImagesCreateParameters.Generated.cs @@ -18,7 +18,7 @@ public class ImagesCreateParameters // (main.ImagesCreateParameters) [QueryStringParameter("message", false)] public string? Message { get; set; } - [QueryStringParameter("changes", false, typeof(EnumerableQueryStringConverter))] + [QueryStringParameter("changes", false, typeof(QueryStringEnumerableConverter))] public IList? Changes { get; set; } [QueryStringParameter("platform", false)] diff --git a/src/Docker.DotNet/Models/ImagesListParameters.Generated.cs b/src/Docker.DotNet/Models/ImagesListParameters.Generated.cs index c1e26dec..17f6fa8f 100644 --- a/src/Docker.DotNet/Models/ImagesListParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ImagesListParameters.Generated.cs @@ -3,19 +3,19 @@ namespace Docker.DotNet.Models { public class ImagesListParameters // (main.ImagesListParameters) { - [QueryStringParameter("all", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("all", false, typeof(QueryStringBoolConverter))] public bool? All { get; set; } - [QueryStringParameter("filters", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("filters", false, typeof(QueryStringMapConverter))] public IDictionary>? Filters { get; set; } - [QueryStringParameter("shared-size", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("shared-size", false, typeof(QueryStringBoolConverter))] public bool? SharedSize { get; set; } - [QueryStringParameter("digests", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("digests", false, typeof(QueryStringBoolConverter))] public bool? Digests { get; set; } - [QueryStringParameter("manifests", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("manifests", false, typeof(QueryStringBoolConverter))] public bool? Manifests { get; set; } } } diff --git a/src/Docker.DotNet/Models/ImagesPruneParameters.Generated.cs b/src/Docker.DotNet/Models/ImagesPruneParameters.Generated.cs index e457204b..f498e702 100644 --- a/src/Docker.DotNet/Models/ImagesPruneParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ImagesPruneParameters.Generated.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet.Models { public class ImagesPruneParameters // (main.ImagesPruneParameters) { - [QueryStringParameter("filters", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("filters", false, typeof(QueryStringMapConverter))] public IDictionary>? Filters { get; set; } } } diff --git a/src/Docker.DotNet/Models/ImagesSearchParameters.Generated.cs b/src/Docker.DotNet/Models/ImagesSearchParameters.Generated.cs index 4c6ff82b..b63c1c61 100644 --- a/src/Docker.DotNet/Models/ImagesSearchParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ImagesSearchParameters.Generated.cs @@ -9,7 +9,7 @@ public class ImagesSearchParameters // (main.ImagesSearchParameters) [QueryStringParameter("limit", false)] public long? Limit { get; set; } - [QueryStringParameter("filters", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("filters", false, typeof(QueryStringMapConverter))] public IDictionary>? Filters { get; set; } } } diff --git a/src/Docker.DotNet/Models/NetworksDeleteUnusedParameters.Generated.cs b/src/Docker.DotNet/Models/NetworksDeleteUnusedParameters.Generated.cs index 1788f844..d3754980 100644 --- a/src/Docker.DotNet/Models/NetworksDeleteUnusedParameters.Generated.cs +++ b/src/Docker.DotNet/Models/NetworksDeleteUnusedParameters.Generated.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet.Models { public class NetworksDeleteUnusedParameters // (main.NetworksDeleteUnusedParameters) { - [QueryStringParameter("filters", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("filters", false, typeof(QueryStringMapConverter))] public IDictionary>? Filters { get; set; } } } diff --git a/src/Docker.DotNet/Models/NetworksListParameters.Generated.cs b/src/Docker.DotNet/Models/NetworksListParameters.Generated.cs index 10e2deb0..9094be91 100644 --- a/src/Docker.DotNet/Models/NetworksListParameters.Generated.cs +++ b/src/Docker.DotNet/Models/NetworksListParameters.Generated.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet.Models { public class NetworksListParameters // (main.NetworksListParameters) { - [QueryStringParameter("filters", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("filters", false, typeof(QueryStringMapConverter))] public IDictionary>? Filters { get; set; } } } diff --git a/src/Docker.DotNet/Models/NodeRemoveParameters.Generated.cs b/src/Docker.DotNet/Models/NodeRemoveParameters.Generated.cs index 305699ef..48d0bcf9 100644 --- a/src/Docker.DotNet/Models/NodeRemoveParameters.Generated.cs +++ b/src/Docker.DotNet/Models/NodeRemoveParameters.Generated.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet.Models { public class NodeRemoveParameters // (main.NodeRemoveParameters) { - [QueryStringParameter("force", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("force", false, typeof(QueryStringBoolConverter))] public bool? Force { get; set; } } } diff --git a/src/Docker.DotNet/Models/PluginDisableParameters.Generated.cs b/src/Docker.DotNet/Models/PluginDisableParameters.Generated.cs index ba4deaee..93581509 100644 --- a/src/Docker.DotNet/Models/PluginDisableParameters.Generated.cs +++ b/src/Docker.DotNet/Models/PluginDisableParameters.Generated.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet.Models { public class PluginDisableParameters // (main.PluginDisableParameters) { - [QueryStringParameter("force", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("force", false, typeof(QueryStringBoolConverter))] public bool? Force { get; set; } } } diff --git a/src/Docker.DotNet/Models/PluginListParameters.Generated.cs b/src/Docker.DotNet/Models/PluginListParameters.Generated.cs index 89dab338..64be9dac 100644 --- a/src/Docker.DotNet/Models/PluginListParameters.Generated.cs +++ b/src/Docker.DotNet/Models/PluginListParameters.Generated.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet.Models { public class PluginListParameters // (main.PluginListParameters) { - [QueryStringParameter("filters", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("filters", false, typeof(QueryStringMapConverter))] public IDictionary>? Filters { get; set; } } } diff --git a/src/Docker.DotNet/Models/PluginRemoveParameters.Generated.cs b/src/Docker.DotNet/Models/PluginRemoveParameters.Generated.cs index 3076aff2..37625105 100644 --- a/src/Docker.DotNet/Models/PluginRemoveParameters.Generated.cs +++ b/src/Docker.DotNet/Models/PluginRemoveParameters.Generated.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet.Models { public class PluginRemoveParameters // (main.PluginRemoveParameters) { - [QueryStringParameter("force", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("force", false, typeof(QueryStringBoolConverter))] public bool? Force { get; set; } } } diff --git a/src/Docker.DotNet/Models/SeccompOpts.Generated.cs b/src/Docker.DotNet/Models/SeccompOpts.Generated.cs index cbad1acc..70cc6744 100644 --- a/src/Docker.DotNet/Models/SeccompOpts.Generated.cs +++ b/src/Docker.DotNet/Models/SeccompOpts.Generated.cs @@ -7,6 +7,6 @@ public class SeccompOpts // (swarm.SeccompOpts) public string? Mode { get; set; } [JsonPropertyName("Profile")] - public IList? Profile { get; set; } + public byte[]? Profile { get; set; } } } diff --git a/src/Docker.DotNet/Models/ServiceListParameters.Generated.cs b/src/Docker.DotNet/Models/ServiceListParameters.Generated.cs index 593b0abb..4d3f8c57 100644 --- a/src/Docker.DotNet/Models/ServiceListParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ServiceListParameters.Generated.cs @@ -3,10 +3,10 @@ namespace Docker.DotNet.Models { public class ServiceListParameters // (main.ServiceListParameters) { - [QueryStringParameter("filters", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("filters", false, typeof(QueryStringMapConverter))] public IDictionary>? Filters { get; set; } - [QueryStringParameter("status", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("status", false, typeof(QueryStringBoolConverter))] public bool? Status { get; set; } } } diff --git a/src/Docker.DotNet/Models/ServiceLogsParameters.Generated.cs b/src/Docker.DotNet/Models/ServiceLogsParameters.Generated.cs index 67e9fadc..67c65f50 100644 --- a/src/Docker.DotNet/Models/ServiceLogsParameters.Generated.cs +++ b/src/Docker.DotNet/Models/ServiceLogsParameters.Generated.cs @@ -3,25 +3,25 @@ namespace Docker.DotNet.Models { public class ServiceLogsParameters // (main.ServiceLogsParameters) { - [QueryStringParameter("stdout", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("stdout", false, typeof(QueryStringBoolConverter))] public bool? ShowStdout { get; set; } - [QueryStringParameter("stderr", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("stderr", false, typeof(QueryStringBoolConverter))] public bool? ShowStderr { get; set; } [QueryStringParameter("since", false)] public string? Since { get; set; } - [QueryStringParameter("timestamps", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("timestamps", false, typeof(QueryStringBoolConverter))] public bool? Timestamps { get; set; } - [QueryStringParameter("follow", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("follow", false, typeof(QueryStringBoolConverter))] public bool? Follow { get; set; } [QueryStringParameter("tail", false)] public string? Tail { get; set; } - [QueryStringParameter("details", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("details", false, typeof(QueryStringBoolConverter))] public bool? Details { get; set; } } } diff --git a/src/Docker.DotNet/Models/SwarmConfigSpec.Generated.cs b/src/Docker.DotNet/Models/SwarmConfigSpec.Generated.cs index 38f0b155..a0346be1 100644 --- a/src/Docker.DotNet/Models/SwarmConfigSpec.Generated.cs +++ b/src/Docker.DotNet/Models/SwarmConfigSpec.Generated.cs @@ -23,8 +23,7 @@ public SwarmConfigSpec(Annotations Annotations) public IDictionary Labels { get; set; } = default!; [JsonPropertyName("Data")] - [JsonConverter(typeof(Base64Converter))] - public IList? Data { get; set; } + public byte[]? Data { get; set; } [JsonPropertyName("Templating")] public SwarmDriver? Templating { get; set; } diff --git a/src/Docker.DotNet/Models/SwarmLeaveParameters.Generated.cs b/src/Docker.DotNet/Models/SwarmLeaveParameters.Generated.cs index a3109483..3d97d292 100644 --- a/src/Docker.DotNet/Models/SwarmLeaveParameters.Generated.cs +++ b/src/Docker.DotNet/Models/SwarmLeaveParameters.Generated.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet.Models { public class SwarmLeaveParameters // (main.SwarmLeaveParameters) { - [QueryStringParameter("force", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("force", false, typeof(QueryStringBoolConverter))] public bool? Force { get; set; } } } diff --git a/src/Docker.DotNet/Models/SwarmRestartPolicy.Generated.cs b/src/Docker.DotNet/Models/SwarmRestartPolicy.Generated.cs index 104a1949..03bad24c 100644 --- a/src/Docker.DotNet/Models/SwarmRestartPolicy.Generated.cs +++ b/src/Docker.DotNet/Models/SwarmRestartPolicy.Generated.cs @@ -7,12 +7,12 @@ public class SwarmRestartPolicy // (swarm.RestartPolicy) public string? Condition { get; set; } [JsonPropertyName("Delay")] - public long? Delay { get; set; } + public TimeSpan? Delay { get; set; } [JsonPropertyName("MaxAttempts")] public ulong? MaxAttempts { get; set; } [JsonPropertyName("Window")] - public long? Window { get; set; } + public TimeSpan? Window { get; set; } } } diff --git a/src/Docker.DotNet/Models/SwarmSecretSpec.Generated.cs b/src/Docker.DotNet/Models/SwarmSecretSpec.Generated.cs index 00d9d172..8ae8aa28 100644 --- a/src/Docker.DotNet/Models/SwarmSecretSpec.Generated.cs +++ b/src/Docker.DotNet/Models/SwarmSecretSpec.Generated.cs @@ -23,8 +23,7 @@ public SwarmSecretSpec(Annotations Annotations) public IDictionary Labels { get; set; } = default!; [JsonPropertyName("Data")] - [JsonConverter(typeof(Base64Converter))] - public IList? Data { get; set; } + public byte[]? Data { get; set; } [JsonPropertyName("Driver")] public SwarmDriver? Driver { get; set; } diff --git a/src/Docker.DotNet/Models/SwarmUpdateConfig.Generated.cs b/src/Docker.DotNet/Models/SwarmUpdateConfig.Generated.cs index b298b15e..4da80768 100644 --- a/src/Docker.DotNet/Models/SwarmUpdateConfig.Generated.cs +++ b/src/Docker.DotNet/Models/SwarmUpdateConfig.Generated.cs @@ -7,13 +7,13 @@ public class SwarmUpdateConfig // (swarm.UpdateConfig) public ulong Parallelism { get; set; } = default!; [JsonPropertyName("Delay")] - public long? Delay { get; set; } + public TimeSpan? Delay { get; set; } [JsonPropertyName("FailureAction")] public string? FailureAction { get; set; } [JsonPropertyName("Monitor")] - public long? Monitor { get; set; } + public TimeSpan? Monitor { get; set; } [JsonPropertyName("MaxFailureRatio")] public float MaxFailureRatio { get; set; } = default!; diff --git a/src/Docker.DotNet/Models/SwarmUpdateParameters.Generated.cs b/src/Docker.DotNet/Models/SwarmUpdateParameters.Generated.cs index 0d1c6b93..da849eae 100644 --- a/src/Docker.DotNet/Models/SwarmUpdateParameters.Generated.cs +++ b/src/Docker.DotNet/Models/SwarmUpdateParameters.Generated.cs @@ -9,13 +9,13 @@ public class SwarmUpdateParameters // (main.SwarmUpdateParameters) [QueryStringParameter("version", true)] public long Version { get; set; } = default!; - [QueryStringParameter("rotateworkertoken", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("rotateworkertoken", false, typeof(QueryStringBoolConverter))] public bool? RotateWorkerToken { get; set; } - [QueryStringParameter("rotatemanagertoken", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("rotatemanagertoken", false, typeof(QueryStringBoolConverter))] public bool? RotateManagerToken { get; set; } - [QueryStringParameter("rotatemanagerunlockkey", false, typeof(BoolQueryStringConverter))] + [QueryStringParameter("rotatemanagerunlockkey", false, typeof(QueryStringBoolConverter))] public bool? RotateManagerUnlockKey { get; set; } } } diff --git a/src/Docker.DotNet/Models/TLSInfo.Generated.cs b/src/Docker.DotNet/Models/TLSInfo.Generated.cs index 24951168..f75fccd7 100644 --- a/src/Docker.DotNet/Models/TLSInfo.Generated.cs +++ b/src/Docker.DotNet/Models/TLSInfo.Generated.cs @@ -7,11 +7,9 @@ public class TLSInfo // (swarm.TLSInfo) public string? TrustRoot { get; set; } [JsonPropertyName("CertIssuerSubject")] - [JsonConverter(typeof(Base64Converter))] - public IList? CertIssuerSubject { get; set; } + public byte[]? CertIssuerSubject { get; set; } [JsonPropertyName("CertIssuerPublicKey")] - [JsonConverter(typeof(Base64Converter))] - public IList? CertIssuerPublicKey { get; set; } + public byte[]? CertIssuerPublicKey { get; set; } } } diff --git a/src/Docker.DotNet/Models/TasksListParameters.Generated.cs b/src/Docker.DotNet/Models/TasksListParameters.Generated.cs index d7d781d0..7f2a0781 100644 --- a/src/Docker.DotNet/Models/TasksListParameters.Generated.cs +++ b/src/Docker.DotNet/Models/TasksListParameters.Generated.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet.Models { public class TasksListParameters // (main.TasksListParameters) { - [QueryStringParameter("filters", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("filters", false, typeof(QueryStringMapConverter))] public IDictionary>? Filters { get; set; } } } diff --git a/src/Docker.DotNet/Models/VolumesListParameters.Generated.cs b/src/Docker.DotNet/Models/VolumesListParameters.Generated.cs index 49f1c909..23ee4075 100644 --- a/src/Docker.DotNet/Models/VolumesListParameters.Generated.cs +++ b/src/Docker.DotNet/Models/VolumesListParameters.Generated.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet.Models { public class VolumesListParameters // (main.VolumesListParameters) { - [QueryStringParameter("filters", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("filters", false, typeof(QueryStringMapConverter))] public IDictionary>? Filters { get; set; } } } diff --git a/src/Docker.DotNet/Models/VolumesPruneParameters.Generated.cs b/src/Docker.DotNet/Models/VolumesPruneParameters.Generated.cs index 6904b653..1f727c41 100644 --- a/src/Docker.DotNet/Models/VolumesPruneParameters.Generated.cs +++ b/src/Docker.DotNet/Models/VolumesPruneParameters.Generated.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet.Models { public class VolumesPruneParameters // (main.VolumesPruneParameters) { - [QueryStringParameter("filters", false, typeof(MapQueryStringConverter))] + [QueryStringParameter("filters", false, typeof(QueryStringMapConverter))] public IDictionary>? Filters { get; set; } } } diff --git a/src/Docker.DotNet/BoolQueryStringConverter.cs b/src/Docker.DotNet/QueryStringBoolConverter.cs similarity index 82% rename from src/Docker.DotNet/BoolQueryStringConverter.cs rename to src/Docker.DotNet/QueryStringBoolConverter.cs index 936e0be0..7ff3a44d 100644 --- a/src/Docker.DotNet/BoolQueryStringConverter.cs +++ b/src/Docker.DotNet/QueryStringBoolConverter.cs @@ -1,6 +1,6 @@ namespace Docker.DotNet; -internal class BoolQueryStringConverter : IQueryStringConverter +internal class QueryStringBoolConverter : IQueryStringConverter { public bool CanConvert(Type t) { diff --git a/src/Docker.DotNet/EnumerableQueryStringConverter.cs b/src/Docker.DotNet/QueryStringEnumerableConverter.cs similarity index 92% rename from src/Docker.DotNet/EnumerableQueryStringConverter.cs rename to src/Docker.DotNet/QueryStringEnumerableConverter.cs index b3496a39..7d21a955 100644 --- a/src/Docker.DotNet/EnumerableQueryStringConverter.cs +++ b/src/Docker.DotNet/QueryStringEnumerableConverter.cs @@ -3,7 +3,7 @@ namespace Docker.DotNet; /// /// Handles serialization of objects like Lists, Arrays, etc. /// -internal class EnumerableQueryStringConverter : IQueryStringConverter +internal class QueryStringEnumerableConverter : IQueryStringConverter { public bool CanConvert(Type t) { diff --git a/src/Docker.DotNet/MapQueryStringConverter.cs b/src/Docker.DotNet/QueryStringMapConverter.cs similarity index 85% rename from src/Docker.DotNet/MapQueryStringConverter.cs rename to src/Docker.DotNet/QueryStringMapConverter.cs index 7464d3c7..5a9826e1 100644 --- a/src/Docker.DotNet/MapQueryStringConverter.cs +++ b/src/Docker.DotNet/QueryStringMapConverter.cs @@ -1,6 +1,6 @@ namespace Docker.DotNet; -internal class MapQueryStringConverter : IQueryStringConverter +internal class QueryStringMapConverter : IQueryStringConverter { public bool CanConvert(Type t) { diff --git a/src/Docker.DotNet/TimeSpanNanoSecondsConverter.cs b/src/Docker.DotNet/TimeSpanNanoSecondsConverter.cs deleted file mode 100644 index bba4ef12..00000000 --- a/src/Docker.DotNet/TimeSpanNanoSecondsConverter.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace Docker.DotNet; - -internal class TimeSpanNanosecondsConverter : JsonConverter -{ - private const int MilliSecondToNanoSecond = 1000000; - - public override TimeSpan Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - var valueInNanoseconds = reader.GetInt64(); - var valueInMilliseconds = valueInNanoseconds / MilliSecondToNanoSecond; - return TimeSpan.FromMilliseconds(valueInMilliseconds); - } - - public override void Write(Utf8JsonWriter writer, TimeSpan timeSpan, JsonSerializerOptions options) - { - writer.WriteNumberValue(timeSpan.TotalMilliseconds * MilliSecondToNanoSecond); - } -} \ No newline at end of file diff --git a/src/Docker.DotNet/TimeSpanSecondsConverter.cs b/src/Docker.DotNet/TimeSpanSecondsConverter.cs deleted file mode 100644 index 1bc5336e..00000000 --- a/src/Docker.DotNet/TimeSpanSecondsConverter.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace Docker.DotNet; - -internal class TimeSpanSecondsConverter : JsonConverter -{ - public override TimeSpan? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - if (reader.TokenType == JsonTokenType.Null) - { - return null; - } - - return TimeSpan.FromSeconds(reader.GetInt64()); - } - - public override void Write(Utf8JsonWriter writer, TimeSpan? value, JsonSerializerOptions options) - { - if (value == null) - { - return; - } - - writer.WriteNumberValue(value.Value.TotalSeconds); - } -} \ No newline at end of file diff --git a/test/Docker.DotNet.Tests/IConfigOperationsTests.cs b/test/Docker.DotNet.Tests/IConfigOperationsTests.cs index 533d5d25..6a0ab254 100644 --- a/test/Docker.DotNet.Tests/IConfigOperationsTests.cs +++ b/test/Docker.DotNet.Tests/IConfigOperationsTests.cs @@ -23,7 +23,7 @@ public async Task SwarmConfig_CanCreateAndRead() { Name = $"Config-{Guid.NewGuid().ToString().Substring(1, 10)}", Labels = new Dictionary { { "key", "value" } }, - Data = new List { 1, 2, 3, 4, 5 } + Data = [1, 2, 3, 4, 5] }; var configParameters = new SwarmCreateConfigParameters diff --git a/test/Docker.DotNet.Tests/ConsoleSizeConverterTests.cs b/test/Docker.DotNet.Tests/JsonConsoleSizeConverterTests.cs similarity index 98% rename from test/Docker.DotNet.Tests/ConsoleSizeConverterTests.cs rename to test/Docker.DotNet.Tests/JsonConsoleSizeConverterTests.cs index baab391b..555d17b1 100644 --- a/test/Docker.DotNet.Tests/ConsoleSizeConverterTests.cs +++ b/test/Docker.DotNet.Tests/JsonConsoleSizeConverterTests.cs @@ -1,6 +1,6 @@ namespace Docker.DotNet.Tests; -public sealed class ConsoleSizeConverterTests +public sealed class JsonConsoleSizeConverterTests { private const ulong Height = 24; diff --git a/tools/specgen/csharptype.go b/tools/specgen/csharptype.go index e58935c6..8ee20c4e 100644 --- a/tools/specgen/csharptype.go +++ b/tools/specgen/csharptype.go @@ -80,6 +80,8 @@ var CSCustomTypeMap = map[reflect.Type]CSType{ reflect.TypeOf(network.HardwareAddr{}): {"", "string"}, reflect.TypeOf(network.Port{}): {"", "string"}, reflect.TypeOf(time.Time{}): {"System", "DateTime"}, + reflect.TypeOf(time.Duration(0)): {"System", "TimeSpan"}, + reflect.TypeOf([]byte(nil)): {"", "byte[]"}, EmptyStruct: {"", "BUG_IN_CONVERSION"}, } diff --git a/tools/specgen/specgen.go b/tools/specgen/specgen.go index 0672cda9..218fde67 100644 --- a/tools/specgen/specgen.go +++ b/tools/specgen/specgen.go @@ -21,7 +21,6 @@ import ( "github.com/moby/moby/api/types/system" "github.com/moby/moby/api/types/volume" "github.com/moby/moby/client" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) var reflectedTypes = map[string]*CSModelType{} @@ -37,22 +36,13 @@ func typeToKey(t reflect.Type) string { type ImageLoadResult struct{} var typesToDisambiguate = map[string]*CSModelType{ - typeToKey(reflect.TypeOf(ocispec.Descriptor{})): { - Properties: []CSProperty{ - { - Name: "Data", - Type: CSType{"", "IList"}, - Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(Base64Converter)"}}}}, - }, - }, - }, typeToKey(reflect.TypeOf(container.Config{})): { Name: "ContainerConfig", Properties: []CSProperty{ { Name: "StopTimeout", Type: CSType{"System", "TimeSpan"}, - Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(TimeSpanSecondsConverter)"}}}}, + Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(JsonTimeSpanSecondsConverter)"}}}}, }, }, }, @@ -61,25 +51,11 @@ var typesToDisambiguate = map[string]*CSModelType{ { Name: "ConsoleSize", Type: CSType{"", "ConsoleSize"}, - Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(ConsoleSizeConverter)"}}}}, + Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(JsonConsoleSizeConverter)"}}}}, }, }, }, typeToKey(reflect.TypeOf(container.CreateResponse{})): {Name: "CreateContainerResponse"}, - typeToKey(reflect.TypeOf(container.HealthConfig{})): { - Properties: []CSProperty{ - { - Name: "Interval", - Type: CSType{"System", "TimeSpan"}, - Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(TimeSpanNanosecondsConverter)"}}}}, - }, - { - Name: "Timeout", - Type: CSType{"System", "TimeSpan"}, - Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(TimeSpanNanosecondsConverter)"}}}}, - }, - }, - }, typeToKey(reflect.TypeOf(container.RestartPolicy{})): { Properties: []CSProperty{{Name: "Name", Type: CSType{"", "RestartPolicyKind"}}}, }, @@ -107,7 +83,7 @@ var typesToDisambiguate = map[string]*CSModelType{ { Name: "StopTimeout", Type: CSType{"System", "TimeSpan"}, - Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(TimeSpanSecondsConverter)"}}}}, + Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(JsonTimeSpanSecondsConverter)"}}}}, }, }, }, @@ -116,7 +92,7 @@ var typesToDisambiguate = map[string]*CSModelType{ { Name: "ConsoleSize", Type: CSType{"", "ConsoleSize"}, - Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(ConsoleSizeConverter)"}}}}, + Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(JsonConsoleSizeConverter)"}}}}, }, }, }, @@ -125,7 +101,7 @@ var typesToDisambiguate = map[string]*CSModelType{ { Name: "ConsoleSize", Type: CSType{"", "ConsoleSize"}, - Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(ConsoleSizeConverter)"}}}}, + Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(JsonConsoleSizeConverter)"}}}}, }, }, }, @@ -136,39 +112,21 @@ var typesToDisambiguate = map[string]*CSModelType{ typeToKey(reflect.TypeOf(registry.AuthResponse{})): {Name: "AuthResponse"}, typeToKey(reflect.TypeOf(registry.SearchResult{})): {Name: "ImageSearchResponse"}, typeToKey(reflect.TypeOf(swarm.RuntimeSpec{})): {Name: "SwarmRuntimeSpec"}, - typeToKey(reflect.TypeOf(swarm.ConfigSpec{})): { - Name: "SwarmConfigSpec", - Properties: []CSProperty{ - { - Name: "Data", - Type: CSType{"", "IList"}, - Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(Base64Converter)"}}}}, - }, - }, - }, - typeToKey(reflect.TypeOf(swarm.SecretSpec{})): { - Name: "SwarmSecretSpec", - Properties: []CSProperty{ - { - Name: "Data", - Type: CSType{"", "IList"}, - Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(Base64Converter)"}}}}, - }, - }, - }, - typeToKey(reflect.TypeOf(swarm.Driver{})): {Name: "SwarmDriver"}, - typeToKey(reflect.TypeOf(swarm.InitRequest{})): {Name: "SwarmInitParameters"}, - typeToKey(reflect.TypeOf(swarm.IPAMConfig{})): {Name: "SwarmIPAMConfig"}, - typeToKey(reflect.TypeOf(swarm.JoinRequest{})): {Name: "SwarmJoinParameters"}, - typeToKey(reflect.TypeOf(swarm.Limit{})): {Name: "SwarmLimit"}, - typeToKey(reflect.TypeOf(swarm.Network{})): {Name: "SwarmNetwork"}, - typeToKey(reflect.TypeOf(swarm.Node{})): {Name: "NodeListResponse"}, - typeToKey(reflect.TypeOf(swarm.NodeSpec{})): {Name: "NodeUpdateParameters"}, - typeToKey(reflect.TypeOf(swarm.Platform{})): {Name: "SwarmPlatform"}, - typeToKey(reflect.TypeOf(swarm.Resources{})): {Name: "SwarmResources"}, - typeToKey(reflect.TypeOf(swarm.RestartPolicy{})): {Name: "SwarmRestartPolicy"}, - typeToKey(reflect.TypeOf(swarm.Service{})): {Name: "SwarmService"}, - typeToKey(reflect.TypeOf(swarm.Swarm{})): {Name: "SwarmInspectResponse"}, + typeToKey(reflect.TypeOf(swarm.ConfigSpec{})): {Name: "SwarmConfigSpec"}, + typeToKey(reflect.TypeOf(swarm.SecretSpec{})): {Name: "SwarmSecretSpec"}, + typeToKey(reflect.TypeOf(swarm.Driver{})): {Name: "SwarmDriver"}, + typeToKey(reflect.TypeOf(swarm.InitRequest{})): {Name: "SwarmInitParameters"}, + typeToKey(reflect.TypeOf(swarm.IPAMConfig{})): {Name: "SwarmIPAMConfig"}, + typeToKey(reflect.TypeOf(swarm.JoinRequest{})): {Name: "SwarmJoinParameters"}, + typeToKey(reflect.TypeOf(swarm.Limit{})): {Name: "SwarmLimit"}, + typeToKey(reflect.TypeOf(swarm.Network{})): {Name: "SwarmNetwork"}, + typeToKey(reflect.TypeOf(swarm.Node{})): {Name: "NodeListResponse"}, + typeToKey(reflect.TypeOf(swarm.NodeSpec{})): {Name: "NodeUpdateParameters"}, + typeToKey(reflect.TypeOf(swarm.Platform{})): {Name: "SwarmPlatform"}, + typeToKey(reflect.TypeOf(swarm.Resources{})): {Name: "SwarmResources"}, + typeToKey(reflect.TypeOf(swarm.RestartPolicy{})): {Name: "SwarmRestartPolicy"}, + typeToKey(reflect.TypeOf(swarm.Service{})): {Name: "SwarmService"}, + typeToKey(reflect.TypeOf(swarm.Swarm{})): {Name: "SwarmInspectResponse"}, typeToKey(reflect.TypeOf(swarm.Task{})): { Name: "TaskResponse", Properties: []CSProperty{ @@ -180,20 +138,6 @@ var typesToDisambiguate = map[string]*CSModelType{ {Name: "State", Type: CSType{"", "TaskState"}}, }, }, - typeToKey(reflect.TypeOf(swarm.TLSInfo{})): { - Properties: []CSProperty{ - { - Name: "CertIssuerSubject", - Type: CSType{"", "IList"}, - Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(Base64Converter)"}}}}, - }, - { - Name: "CertIssuerPublicKey", - Type: CSType{"", "IList"}, - Attributes: []CSAttribute{{Type: CSType{"System.Text.Json.Serialization", "JsonConverter"}, Arguments: []CSArgument{{Value: "typeof(Base64Converter)"}}}}, - }, - }, - }, typeToKey(reflect.TypeOf(swarm.UpdateConfig{})): {Name: "SwarmUpdateConfig"}, typeToKey(reflect.TypeOf(swarm.ConfigReference{})): {Name: "SwarmConfigReference"}, typeToKey(reflect.TypeOf(container.Summary{})): { @@ -754,11 +698,11 @@ func reflectTypeMembers(t reflect.Type, m *CSModelType) { switch f.Type.Kind() { case reflect.Bool: - a.Arguments = append(a.Arguments, CSArgument{Value: "typeof(BoolQueryStringConverter)"}) + a.Arguments = append(a.Arguments, CSArgument{Value: "typeof(QueryStringBoolConverter)"}) case reflect.Slice, reflect.Array: - a.Arguments = append(a.Arguments, CSArgument{Value: "typeof(EnumerableQueryStringConverter)"}) + a.Arguments = append(a.Arguments, CSArgument{Value: "typeof(QueryStringEnumerableConverter)"}) case reflect.Map: - a.Arguments = append(a.Arguments, CSArgument{Value: "typeof(MapQueryStringConverter)"}) + a.Arguments = append(a.Arguments, CSArgument{Value: "typeof(QueryStringMapConverter)"}) } csProp.IsOpt = omitEmpty || !restTag.Required