From 52aec27d64379c8246a335f4d659da8ad9c9b196 Mon Sep 17 00:00:00 2001 From: Gehongyan Date: Fri, 24 Feb 2023 23:46:14 +0800 Subject: [PATCH] Simplify color conversion --- src/Kook.Net.Rest/API/Common/Cards/Card.cs | 3 +- .../API/Common/Embeds/LinkEmbed.cs | 2 +- src/Kook.Net.Rest/API/Common/MentionRole.cs | 19 ----------- .../API/Common/Pokes/PokeQualityResource.cs | 2 +- src/Kook.Net.Rest/API/Common/Role.cs | 33 ++++++++++++++----- src/Kook.Net.Rest/API/Common/Tag.cs | 11 ------- src/Kook.Net.Rest/API/Common/UserTag.cs | 2 +- src/Kook.Net.Rest/API/Rest/GuildMember.cs | 30 ++++++++++++----- .../API/Rest/ModifyGuildRoleParams.cs | 4 ++- src/Kook.Net.Rest/Entities/Roles/RestRole.cs | 2 +- .../Entities/Roles/RoleHelper.cs | 2 +- .../Entities/Users/RestGuildUser.cs | 2 +- .../Net/Converters/Cards/ColorConverter.cs | 20 ----------- ...ColorConverter.cs => HexColorConverter.cs} | 2 +- .../Cards/RawValueColorConverter.cs | 18 ++++++++++ .../Entities/Roles/SocketRole.cs | 2 +- .../Entities/Users/SocketGuildUser.cs | 2 +- 17 files changed, 79 insertions(+), 77 deletions(-) delete mode 100644 src/Kook.Net.Rest/API/Common/MentionRole.cs delete mode 100644 src/Kook.Net.Rest/API/Common/Tag.cs delete mode 100644 src/Kook.Net.Rest/Net/Converters/Cards/ColorConverter.cs rename src/Kook.Net.Rest/Net/Converters/Cards/{NullableColorConverter.cs => HexColorConverter.cs} (91%) create mode 100644 src/Kook.Net.Rest/Net/Converters/Cards/RawValueColorConverter.cs diff --git a/src/Kook.Net.Rest/API/Common/Cards/Card.cs b/src/Kook.Net.Rest/API/Common/Cards/Card.cs index 2ef406ea..e9e4c126 100644 --- a/src/Kook.Net.Rest/API/Common/Cards/Card.cs +++ b/src/Kook.Net.Rest/API/Common/Cards/Card.cs @@ -10,7 +10,8 @@ internal class Card : CardBase public CardTheme Theme { get; set; } [JsonPropertyName("color")] - [JsonConverter(typeof(NullableColorConverter))] + [JsonConverter(typeof(HexColorConverter))] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Color? Color { get; set; } [JsonPropertyName("size")] diff --git a/src/Kook.Net.Rest/API/Common/Embeds/LinkEmbed.cs b/src/Kook.Net.Rest/API/Common/Embeds/LinkEmbed.cs index 3baf525b..c138dfe3 100644 --- a/src/Kook.Net.Rest/API/Common/Embeds/LinkEmbed.cs +++ b/src/Kook.Net.Rest/API/Common/Embeds/LinkEmbed.cs @@ -15,7 +15,7 @@ internal class LinkEmbed : EmbedBase public string SiteName { get; set; } [JsonPropertyName("theme_color")] - [JsonConverter(typeof(ColorConverter))] + [JsonConverter(typeof(HexColorConverter))] public Color Color { get; set; } [JsonPropertyName("image")] diff --git a/src/Kook.Net.Rest/API/Common/MentionRole.cs b/src/Kook.Net.Rest/API/Common/MentionRole.cs deleted file mode 100644 index fca23d53..00000000 --- a/src/Kook.Net.Rest/API/Common/MentionRole.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Kook.Net.Converters; -using System.Text.Json.Serialization; - -namespace Kook.API; - -internal class MentionRole -{ - [JsonPropertyName("role_id")] public uint RoleId { get; set; } - [JsonPropertyName("name")] public string Name { get; set; } - - [JsonPropertyName("color")] - [JsonConverter(typeof(ColorConverter))] - public Color Color { get; set; } - - [JsonPropertyName("position")] public int Position { get; set; } - [JsonPropertyName("hoist")] public int Hoist { get; set; } - [JsonPropertyName("mentionable")] public int Mentionable { get; set; } - [JsonPropertyName("permissions")] public ulong Permissions { get; set; } -} diff --git a/src/Kook.Net.Rest/API/Common/Pokes/PokeQualityResource.cs b/src/Kook.Net.Rest/API/Common/Pokes/PokeQualityResource.cs index 3744a8b6..b433b158 100644 --- a/src/Kook.Net.Rest/API/Common/Pokes/PokeQualityResource.cs +++ b/src/Kook.Net.Rest/API/Common/Pokes/PokeQualityResource.cs @@ -6,7 +6,7 @@ namespace Kook.API; internal class PokeQualityResource { [JsonPropertyName("color")] - [JsonConverter(typeof(ColorConverter))] + [JsonConverter(typeof(HexColorConverter))] public Color Color { get; set; } [JsonPropertyName("small")] public string Small { get; set; } diff --git a/src/Kook.Net.Rest/API/Common/Role.cs b/src/Kook.Net.Rest/API/Common/Role.cs index 3b1a6c23..baa824bf 100644 --- a/src/Kook.Net.Rest/API/Common/Role.cs +++ b/src/Kook.Net.Rest/API/Common/Role.cs @@ -1,15 +1,32 @@ +using Kook.Net.Converters; using System.Text.Json.Serialization; namespace Kook.API; internal class Role { - [JsonPropertyName("role_id")] public uint Id { get; set; } - [JsonPropertyName("name")] public string Name { get; set; } - [JsonPropertyName("color")] public uint Color { get; set; } - [JsonPropertyName("position")] public int Position { get; set; } - [JsonPropertyName("hoist")] public int Hoist { get; set; } - [JsonPropertyName("mentionable")] public int Mentionable { get; set; } - [JsonPropertyName("permissions")] public ulong Permissions { get; set; } - [JsonPropertyName("type")] public RoleType? Type { get; set; } + [JsonPropertyName("role_id")] + public uint Id { get; set; } + + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("color")] + [JsonConverter(typeof(RawValueColorConverter))] + public Color Color { get; set; } + + [JsonPropertyName("position")] + public int Position { get; set; } + + [JsonPropertyName("hoist")] + public int Hoist { get; set; } + + [JsonPropertyName("mentionable")] + public int Mentionable { get; set; } + + [JsonPropertyName("permissions")] + public ulong Permissions { get; set; } + + [JsonPropertyName("type")] + public RoleType? Type { get; set; } } diff --git a/src/Kook.Net.Rest/API/Common/Tag.cs b/src/Kook.Net.Rest/API/Common/Tag.cs deleted file mode 100644 index c2a10919..00000000 --- a/src/Kook.Net.Rest/API/Common/Tag.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Text.Json.Serialization; - -namespace Kook.API; - -internal class Tag -{ - [JsonPropertyName("color")] - public string Color { get; set; } - [JsonPropertyName("text")] - public string Text { get; set; } -} diff --git a/src/Kook.Net.Rest/API/Common/UserTag.cs b/src/Kook.Net.Rest/API/Common/UserTag.cs index 36428276..32cc466a 100644 --- a/src/Kook.Net.Rest/API/Common/UserTag.cs +++ b/src/Kook.Net.Rest/API/Common/UserTag.cs @@ -6,7 +6,7 @@ namespace Kook.API; internal class UserTag { [JsonPropertyName("color")] - [JsonConverter(typeof(ColorConverter))] + [JsonConverter(typeof(HexColorConverter))] public Color Color { get; set; } [JsonPropertyName("text")] diff --git a/src/Kook.Net.Rest/API/Rest/GuildMember.cs b/src/Kook.Net.Rest/API/Rest/GuildMember.cs index ea210e1d..32bf4ca8 100644 --- a/src/Kook.Net.Rest/API/Rest/GuildMember.cs +++ b/src/Kook.Net.Rest/API/Rest/GuildMember.cs @@ -5,8 +5,11 @@ namespace Kook.API.Rest; internal class GuildMember : User { - [JsonPropertyName("nickname")] public string Nickname { get; set; } - [JsonPropertyName("mobile_verified")] public bool MobileVerified { get; set; } + [JsonPropertyName("nickname")] + public string Nickname { get; set; } + + [JsonPropertyName("mobile_verified")] + public bool MobileVerified { get; set; } [JsonPropertyName("joined_at")] [JsonConverter(typeof(DateTimeOffsetUnixTimeMillisecondsConverter))] @@ -16,9 +19,15 @@ internal class GuildMember : User [JsonConverter(typeof(DateTimeOffsetUnixTimeMillisecondsConverter))] public DateTimeOffset ActiveAt { get; set; } - [JsonPropertyName("hoist_info")] public HoistInfo HoistInfo { get; set; } - [JsonPropertyName("color")] public uint Color { get; set; } - [JsonPropertyName("roles")] public uint[] Roles { get; set; } + [JsonPropertyName("hoist_info")] + public HoistInfo HoistInfo { get; set; } + + [JsonPropertyName("color")] + [JsonConverter(typeof(RawValueColorConverter))] + public Color Color { get; set; } + + [JsonPropertyName("roles")] + public uint[] Roles { get; set; } [JsonPropertyName("is_master")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] @@ -34,7 +43,12 @@ internal class GuildMember : User internal class HoistInfo { - [JsonPropertyName("role_id")] public uint RoleId { get; set; } - [JsonPropertyName("name")] public string Name { get; set; } - [JsonPropertyName("color")] public uint Color { get; set; } + [JsonPropertyName("role_id")] + public uint RoleId { get; set; } + + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("color")] + public uint Color { get; set; } } diff --git a/src/Kook.Net.Rest/API/Rest/ModifyGuildRoleParams.cs b/src/Kook.Net.Rest/API/Rest/ModifyGuildRoleParams.cs index 3589a333..282507b3 100644 --- a/src/Kook.Net.Rest/API/Rest/ModifyGuildRoleParams.cs +++ b/src/Kook.Net.Rest/API/Rest/ModifyGuildRoleParams.cs @@ -1,3 +1,4 @@ +using Kook.Net.Converters; using System.Text.Json.Serialization; namespace Kook.API.Rest; @@ -15,8 +16,9 @@ internal class ModifyGuildRoleParams public string Name { get; set; } [JsonPropertyName("color")] + [JsonConverter(typeof(RawValueColorConverter))] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public uint? Color { get; set; } + public Color? Color { get; set; } [JsonPropertyName("hoist")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] diff --git a/src/Kook.Net.Rest/Entities/Roles/RestRole.cs b/src/Kook.Net.Rest/Entities/Roles/RestRole.cs index f0c8baf8..7aa0c8b5 100644 --- a/src/Kook.Net.Rest/Entities/Roles/RestRole.cs +++ b/src/Kook.Net.Rest/Entities/Roles/RestRole.cs @@ -64,7 +64,7 @@ internal void Update(Model model) IsHoisted = model.Hoist == 1; IsMentionable = model.Mentionable == 1; Position = model.Position; - Color = new Color(model.Color); + Color = model.Color; Permissions = new GuildPermissions(model.Permissions); } diff --git a/src/Kook.Net.Rest/Entities/Roles/RoleHelper.cs b/src/Kook.Net.Rest/Entities/Roles/RoleHelper.cs index 458bf68f..82c1ac21 100644 --- a/src/Kook.Net.Rest/Entities/Roles/RoleHelper.cs +++ b/src/Kook.Net.Rest/Entities/Roles/RoleHelper.cs @@ -27,7 +27,7 @@ public static async Task ModifyAsync(IRole role, BaseKookClient client, GuildId = role.Guild.Id, RoleId = role.Id, Name = args.Name, - Color = args.Color?.RawValue, + Color = args.Color, Hoist = args.Hoist switch { true => 1, diff --git a/src/Kook.Net.Rest/Entities/Users/RestGuildUser.cs b/src/Kook.Net.Rest/Entities/Users/RestGuildUser.cs index 09b1e5a4..6f0d9842 100644 --- a/src/Kook.Net.Rest/Entities/Users/RestGuildUser.cs +++ b/src/Kook.Net.Rest/Entities/Users/RestGuildUser.cs @@ -78,7 +78,7 @@ internal void Update(MemberModel model) IsMobileVerified = model.MobileVerified; JoinedAt = model.JoinedAt; ActiveAt = model.ActiveAt; - Color = new Color(model.Color); + Color = model.Color; IsOwner = model.IsOwner; UpdateRoles(model.Roles); } diff --git a/src/Kook.Net.Rest/Net/Converters/Cards/ColorConverter.cs b/src/Kook.Net.Rest/Net/Converters/Cards/ColorConverter.cs deleted file mode 100644 index f2152f1f..00000000 --- a/src/Kook.Net.Rest/Net/Converters/Cards/ColorConverter.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace Kook.Net.Converters; - -internal class NullableColorConverter : JsonConverter -{ - public override Color? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - string hex = reader.GetString()?.TrimStart('#'); - if (string.IsNullOrWhiteSpace(hex) || hex.Length < 6) - return null; - return new Color(uint.Parse(hex, System.Globalization.NumberStyles.HexNumber)); - } - - public override void Write(Utf8JsonWriter writer, Color? value, JsonSerializerOptions options) - { - writer.WriteStringValue(value.HasValue ? $"#{value.Value.RawValue:X6}" : string.Empty); - } -} diff --git a/src/Kook.Net.Rest/Net/Converters/Cards/NullableColorConverter.cs b/src/Kook.Net.Rest/Net/Converters/Cards/HexColorConverter.cs similarity index 91% rename from src/Kook.Net.Rest/Net/Converters/Cards/NullableColorConverter.cs rename to src/Kook.Net.Rest/Net/Converters/Cards/HexColorConverter.cs index 568f88bc..d78da93d 100644 --- a/src/Kook.Net.Rest/Net/Converters/Cards/NullableColorConverter.cs +++ b/src/Kook.Net.Rest/Net/Converters/Cards/HexColorConverter.cs @@ -3,7 +3,7 @@ namespace Kook.Net.Converters; -internal class ColorConverter : JsonConverter +internal class HexColorConverter : JsonConverter { public override Color Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { diff --git a/src/Kook.Net.Rest/Net/Converters/Cards/RawValueColorConverter.cs b/src/Kook.Net.Rest/Net/Converters/Cards/RawValueColorConverter.cs new file mode 100644 index 00000000..949e4cfe --- /dev/null +++ b/src/Kook.Net.Rest/Net/Converters/Cards/RawValueColorConverter.cs @@ -0,0 +1,18 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Kook.Net.Converters; + +internal class RawValueColorConverter : JsonConverter +{ + public override Color Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + uint rawValue = reader.GetUInt32(); + return new Color(rawValue); + } + + public override void Write(Utf8JsonWriter writer, Color value, JsonSerializerOptions options) + { + writer.WriteNumberValue(value.RawValue); + } +} diff --git a/src/Kook.Net.WebSocket/Entities/Roles/SocketRole.cs b/src/Kook.Net.WebSocket/Entities/Roles/SocketRole.cs index 580a10ee..141b5494 100644 --- a/src/Kook.Net.WebSocket/Entities/Roles/SocketRole.cs +++ b/src/Kook.Net.WebSocket/Entities/Roles/SocketRole.cs @@ -63,7 +63,7 @@ internal void Update(ClientState state, Model model) { Name = model.Name; Type = model.Type; - Color = new Color(model.Color); + Color = model.Color; Position = model.Position; IsHoisted = model.Hoist switch { diff --git a/src/Kook.Net.WebSocket/Entities/Users/SocketGuildUser.cs b/src/Kook.Net.WebSocket/Entities/Users/SocketGuildUser.cs index 60699d4d..7b9917bf 100644 --- a/src/Kook.Net.WebSocket/Entities/Users/SocketGuildUser.cs +++ b/src/Kook.Net.WebSocket/Entities/Users/SocketGuildUser.cs @@ -165,7 +165,7 @@ internal void Update(ClientState state, MemberModel model) IsMobileVerified = model.MobileVerified; JoinedAt = model.JoinedAt; ActiveAt = model.ActiveAt; - Color = new Color(model.Color); + Color = model.Color; IsOwner = model.IsOwner; UpdateRoles(model.Roles); }