From 331b8db0e676e0674a3fee2b334ce6eab36c87dc Mon Sep 17 00:00:00 2001 From: tekgator Date: Tue, 6 Dec 2022 22:18:12 +1000 Subject: [PATCH 1/3] Remove JsonPropertyName attribute from models and work with JsonSerializerOptions case insensitive property instead --- ServerJars/ClientApi.cs | 1 + ServerJars/Models/ApiError.cs | 5 +---- ServerJars/Models/ApiResponse.cs | 6 +----- ServerJars/Models/JarDetails.cs | 13 +------------ ServerJars/Models/JarTypes.cs | 9 +-------- 5 files changed, 5 insertions(+), 29 deletions(-) diff --git a/ServerJars/ClientApi.cs b/ServerJars/ClientApi.cs index 3140d06..4eeaa9e 100644 --- a/ServerJars/ClientApi.cs +++ b/ServerJars/ClientApi.cs @@ -20,6 +20,7 @@ protected ClientApi(string baseUri, HttpClient httpClient, bool disposeClient = _disposeClient = disposeClient; _jsonOptions.Converters.Add(new UnixEpochDateTimeConverter()); + _jsonOptions.PropertyNameCaseInsensitive = true; } protected async Task GetAsync( diff --git a/ServerJars/Models/ApiError.cs b/ServerJars/Models/ApiError.cs index b7ec1e3..78b630e 100644 --- a/ServerJars/Models/ApiError.cs +++ b/ServerJars/Models/ApiError.cs @@ -1,9 +1,6 @@ -using System.Text.Json.Serialization; - -namespace ServerJarsAPI.Models; +namespace ServerJarsAPI.Models; internal class ApiError { - [JsonPropertyName("message")] public string Message { get; set; } = string.Empty; } diff --git a/ServerJars/Models/ApiResponse.cs b/ServerJars/Models/ApiResponse.cs index a5da5bb..53d01ac 100644 --- a/ServerJars/Models/ApiResponse.cs +++ b/ServerJars/Models/ApiResponse.cs @@ -1,13 +1,9 @@ -using System.Text.Json.Serialization; - -namespace ServerJarsAPI.Models; +namespace ServerJarsAPI.Models; internal class ApiResponse { - [JsonPropertyName("status")] public string Status { get; set; } = string.Empty; - [JsonPropertyName("response")] public T? Response { get; set; } public bool IsSuccess => Status == "success" && Response is not null; diff --git a/ServerJars/Models/JarDetails.cs b/ServerJars/Models/JarDetails.cs index 1b82ef6..47ec9e9 100644 --- a/ServerJars/Models/JarDetails.cs +++ b/ServerJars/Models/JarDetails.cs @@ -1,34 +1,23 @@ -using System.Text.Json.Serialization; - -namespace ServerJarsAPI.Models; +namespace ServerJarsAPI.Models; public class JarDetails { - [JsonPropertyName("version")] public string Version { get; set; } = string.Empty; - [JsonPropertyName("file")] public string File { get; set; } = string.Empty; - [JsonPropertyName("size")] public Size Size { get; set; } = new(); - [JsonPropertyName("md5")] public string Md5 { get; set; } = string.Empty; - [JsonPropertyName("built")] - //public long Built { get; set; } = 0; public DateTime Built { get; set; } = DateTime.MinValue; - [JsonPropertyName("stability")] public string Stability { get; set; } = string.Empty; } public class Size { - [JsonPropertyName("display")] public string Display { get; set; } = string.Empty; - [JsonPropertyName("bytes")] public uint Bytes { get; set; } = 0; } diff --git a/ServerJars/Models/JarTypes.cs b/ServerJars/Models/JarTypes.cs index ba85636..56c858c 100644 --- a/ServerJars/Models/JarTypes.cs +++ b/ServerJars/Models/JarTypes.cs @@ -1,21 +1,14 @@ -using System.Text.Json.Serialization; - -namespace ServerJarsAPI.Models; +namespace ServerJarsAPI.Models; public class JarTypes { - [JsonPropertyName("bedrock")] public List Bedrock { get; set; } = new(); - [JsonPropertyName("modded")] public List Modded { get; set; } = new(); - [JsonPropertyName("proxies")] public List Proxies { get; set; } = new(); - [JsonPropertyName("servers")] public List Servers { get; set; } = new(); - [JsonPropertyName("vanilla")] public List Vanilla { get; set; } = new(); } \ No newline at end of file From 7b0a790d6de86a928496622a7a3c367772097738 Mon Sep 17 00:00:00 2001 From: tekgator Date: Tue, 6 Dec 2022 22:18:46 +1000 Subject: [PATCH 2/3] Add ToList method on JarTypes Model to return a list of JarTypeItems for easier access via enumerable --- README.md | 10 ++++++++++ ServerJars.Demo.Console/Program.cs | 8 ++++++++ ServerJars.Tests/ServerJarsTests.cs | 16 ++++++++++++---- ServerJars/Extensions/JarTypesExtensions.cs | 19 +++++++++++++++++++ ServerJars/Models/JarTypeItem.cs | 9 +++++++++ 5 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 ServerJars/Extensions/JarTypesExtensions.cs create mode 100644 ServerJars/Models/JarTypeItem.cs diff --git a/README.md b/README.md index 13e691f..722a06f 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,9 @@ Simply instantiate the `ServerJars` class and use it's methods to gather informa ```CSharp using ServerJarsAPI; +using ServerJarsAPI.Events; +using ServerJarsAPI.Extensions; +using System.Text.Json; var serverJar = new ServerJars(); @@ -36,6 +39,13 @@ var serverJar = new ServerJars(); var types = await serverJar.GetTypes(); Console.WriteLine(JsonSerializer.Serialize(types, jsonOptions)); +// GetTypes.ToList() extension +SetConsoleColor(ConsoleColor.White, ConsoleColor.Red); +Console.WriteLine("\nAPI call - GetTypes.ToList():\n"); +ResetConsoleColor(); + +types.ToList().ForEach(t => Console.WriteLine(t.ToString())); + // GetDetails var details = await serverJar.GetDetails("servers", "spigot", "1.19.1"); Console.WriteLine(JsonSerializer.Serialize(details, jsonOptions)); diff --git a/ServerJars.Demo.Console/Program.cs b/ServerJars.Demo.Console/Program.cs index fb789b0..ff8348b 100644 --- a/ServerJars.Demo.Console/Program.cs +++ b/ServerJars.Demo.Console/Program.cs @@ -1,6 +1,7 @@ // See https://aka.ms/new-console-template for more information using ServerJarsAPI; using ServerJarsAPI.Events; +using ServerJarsAPI.Extensions; using System.Text.Json; var jsonOptions = new JsonSerializerOptions @@ -20,6 +21,13 @@ var types = await serverJar.GetTypes(); Console.WriteLine(JsonSerializer.Serialize(types, jsonOptions)); +// GetTypes.ToList() extension +SetConsoleColor(ConsoleColor.White, ConsoleColor.Red); +Console.WriteLine("\nAPI call - GetTypes.ToList() extension:\n"); +ResetConsoleColor(); + +types.ToList().ForEach(t => Console.WriteLine(t.ToString())); + // GetDetails SetConsoleColor(ConsoleColor.White, ConsoleColor.Red); diff --git a/ServerJars.Tests/ServerJarsTests.cs b/ServerJars.Tests/ServerJarsTests.cs index 401f04c..6c64059 100644 --- a/ServerJars.Tests/ServerJarsTests.cs +++ b/ServerJars.Tests/ServerJarsTests.cs @@ -1,4 +1,5 @@ using ServerJarsAPI.Events; +using ServerJarsAPI.Extensions; using System.Text.Json; namespace ServerJarsAPI.Tests; @@ -9,9 +10,7 @@ public class ServerJarsTests [SetUp] public void Setup() - { - - } + { } [TestCase("")] [TestCase("servers")] @@ -27,6 +26,16 @@ public void GetTypes_InvalidType(string type) Assert.ThrowsAsync(async () => await _serverJars.GetTypes(type)); } + [TestCase("")] + [TestCase("servers")] + public async Task GetTypes_SuccessAsList(string type) + { + var types = (await _serverJars.GetTypes(type)).ToList(); + var item = types.FirstOrDefault(t => t.Category == "servers"); + + Assert.That(item, Is.Not.Null); + } + [TestCase("servers", "spigot", "")] [TestCase("servers", "spigot", "1.19.2")] public async Task GetDetails_Success(string type, string category, string version) @@ -102,7 +111,6 @@ public void GetJar_InvalidTypeCategoryVersion(string type, string category, stri Assert.ThrowsAsync(async () => await _serverJars.GetJar(type, category, version)); } - [TestCase("servers", "spigot", "")] [TestCase("servers", "spigot", "1.19.1")] public async Task GetJarWithProgress_Success(string type, string category, string version) diff --git a/ServerJars/Extensions/JarTypesExtensions.cs b/ServerJars/Extensions/JarTypesExtensions.cs new file mode 100644 index 0000000..4277de2 --- /dev/null +++ b/ServerJars/Extensions/JarTypesExtensions.cs @@ -0,0 +1,19 @@ +using ServerJarsAPI.Models; + +namespace ServerJarsAPI.Extensions; + +public static class JarTypesExtensions +{ + public static List ToList(this JarTypes jarTypes) + { + List list = new(); + + list.AddRange(jarTypes.Vanilla.Select(v => new JarTypeItem() { Category = nameof(jarTypes.Vanilla).ToLower(), Type = v })); + list.AddRange(jarTypes.Bedrock.Select(v => new JarTypeItem() { Category = nameof(jarTypes.Bedrock).ToLower(), Type = v })); + list.AddRange(jarTypes.Servers.Select(v => new JarTypeItem() { Category = nameof(jarTypes.Servers).ToLower(), Type = v })); + list.AddRange(jarTypes.Modded.Select(v => new JarTypeItem() { Category = nameof(jarTypes.Modded).ToLower(), Type = v })); + list.AddRange(jarTypes.Proxies.Select(v => new JarTypeItem() { Category = nameof(jarTypes.Proxies).ToLower(), Type = v })); + + return list; + } +} diff --git a/ServerJars/Models/JarTypeItem.cs b/ServerJars/Models/JarTypeItem.cs new file mode 100644 index 0000000..2c62275 --- /dev/null +++ b/ServerJars/Models/JarTypeItem.cs @@ -0,0 +1,9 @@ +namespace ServerJarsAPI.Models; + +public class JarTypeItem +{ + public string Category { get; set; } = string.Empty; + public string Type { get; set; } = string.Empty; + + public override string ToString() => $"{Category}:{Type}"; +} From 9f1277a631a0bc4dd5221989220b603abc04ae26 Mon Sep 17 00:00:00 2001 From: tekgator Date: Tue, 6 Dec 2022 22:19:09 +1000 Subject: [PATCH 3/3] Prepare for v1.1.0 release --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c2f043a..f6734bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +## [1.1.0] - 2022-12-06 +### Changed +- Remove JsonPropertyName attribute from models and work with JsonSerializerOptions case insensitive property instead + +### Added +- Add ToList method on JarTypes Model to return a list of JarTypeItems for easier access via enumerable + ## [1.0.2] - 2022-12-02 ### Changed