From 792dce684326c04c9d8cf309adbe1f8d9057882d Mon Sep 17 00:00:00 2001 From: Clansty Date: Tue, 26 Nov 2024 00:03:35 +0800 Subject: [PATCH] [+] Add some interfaces for attributes --- AquaMai/AquaMai.Config.Interfaces/IConfigComment.cs | 8 ++++++++ .../AquaMai.Config.Interfaces/IConfigEntryAttribute.cs | 7 +++++++ .../AquaMai.Config.Interfaces/IConfigSectionAttribute.cs | 9 +++++++++ AquaMai/AquaMai.Config.Interfaces/IReflectionManager.cs | 2 ++ AquaMai/AquaMai.Config/Attributes/ConfigComment.cs | 3 ++- .../AquaMai.Config/Attributes/ConfigEntryAttribute.cs | 5 +++-- .../AquaMai.Config/Attributes/ConfigSectionAttribute.cs | 5 +++-- AquaMai/AquaMai.Config/ConfigSerializer.cs | 4 ++-- AquaMai/AquaMai.Config/Reflection/ReflectionManager.cs | 4 ++-- 9 files changed, 38 insertions(+), 9 deletions(-) create mode 100644 AquaMai/AquaMai.Config.Interfaces/IConfigComment.cs create mode 100644 AquaMai/AquaMai.Config.Interfaces/IConfigEntryAttribute.cs create mode 100644 AquaMai/AquaMai.Config.Interfaces/IConfigSectionAttribute.cs diff --git a/AquaMai/AquaMai.Config.Interfaces/IConfigComment.cs b/AquaMai/AquaMai.Config.Interfaces/IConfigComment.cs new file mode 100644 index 00000000..db219eb3 --- /dev/null +++ b/AquaMai/AquaMai.Config.Interfaces/IConfigComment.cs @@ -0,0 +1,8 @@ +namespace AquaMai.Config.Interfaces; + +public interface IConfigComment +{ + string CommentEn { get; init; } + string CommentZh { get; init; } + public string GetLocalized(string lang); +} diff --git a/AquaMai/AquaMai.Config.Interfaces/IConfigEntryAttribute.cs b/AquaMai/AquaMai.Config.Interfaces/IConfigEntryAttribute.cs new file mode 100644 index 00000000..9d1564bc --- /dev/null +++ b/AquaMai/AquaMai.Config.Interfaces/IConfigEntryAttribute.cs @@ -0,0 +1,7 @@ +namespace AquaMai.Config.Interfaces; + +public interface IConfigEntryAttribute +{ + IConfigComment Comment { get; } + bool HideWhenDefault { get; } +} \ No newline at end of file diff --git a/AquaMai/AquaMai.Config.Interfaces/IConfigSectionAttribute.cs b/AquaMai/AquaMai.Config.Interfaces/IConfigSectionAttribute.cs new file mode 100644 index 00000000..b8bdb41d --- /dev/null +++ b/AquaMai/AquaMai.Config.Interfaces/IConfigSectionAttribute.cs @@ -0,0 +1,9 @@ +namespace AquaMai.Config.Interfaces; + +public interface IConfigSectionAttribute +{ + IConfigComment Comment { get; } + bool ExampleHidden { get; } + bool DefaultOn { get; } + bool AlwaysEnabled { get; } +} \ No newline at end of file diff --git a/AquaMai/AquaMai.Config.Interfaces/IReflectionManager.cs b/AquaMai/AquaMai.Config.Interfaces/IReflectionManager.cs index cc76c3bd..41be9ef9 100644 --- a/AquaMai/AquaMai.Config.Interfaces/IReflectionManager.cs +++ b/AquaMai/AquaMai.Config.Interfaces/IReflectionManager.cs @@ -10,6 +10,7 @@ public interface IReflectionManager public string Path { get; } public string Name { get; } public IReflectionField Field { get; } + public IConfigEntryAttribute Attribute { get; init; } } public interface ISection @@ -17,6 +18,7 @@ public interface IReflectionManager public string Path { get; } public IReflectionType Type { get; } public List Entries { get; } + public IConfigSectionAttribute Attribute { get; init; } } public IEnumerable Sections { get; } diff --git a/AquaMai/AquaMai.Config/Attributes/ConfigComment.cs b/AquaMai/AquaMai.Config/Attributes/ConfigComment.cs index 414b4a00..4a9ebb03 100644 --- a/AquaMai/AquaMai.Config/Attributes/ConfigComment.cs +++ b/AquaMai/AquaMai.Config/Attributes/ConfigComment.cs @@ -1,8 +1,9 @@ using System; +using AquaMai.Config.Interfaces; namespace AquaMai.Config.Attributes; -public record ConfigComment(string CommentEn, string CommentZh) +public record ConfigComment(string CommentEn, string CommentZh) : IConfigComment { public string GetLocalized(string lang) => lang switch { diff --git a/AquaMai/AquaMai.Config/Attributes/ConfigEntryAttribute.cs b/AquaMai/AquaMai.Config/Attributes/ConfigEntryAttribute.cs index 05dc5e90..4ea36334 100644 --- a/AquaMai/AquaMai.Config/Attributes/ConfigEntryAttribute.cs +++ b/AquaMai/AquaMai.Config/Attributes/ConfigEntryAttribute.cs @@ -1,4 +1,5 @@ using System; +using AquaMai.Config.Interfaces; namespace AquaMai.Config.Attributes; @@ -16,9 +17,9 @@ public class ConfigEntryAttribute( // Only use it to hide options that really won't be used. bool hideWhenDefault = false, // NOTE: Use this argument to mark special config entries that need special handling. - SpecialConfigEntry specialConfigEntry = SpecialConfigEntry.None) : Attribute + SpecialConfigEntry specialConfigEntry = SpecialConfigEntry.None) : Attribute, IConfigEntryAttribute { - public ConfigComment Comment { get; } = new ConfigComment(en, zh); + public IConfigComment Comment { get; } = new ConfigComment(en, zh); public bool HideWhenDefault { get; } = hideWhenDefault; public SpecialConfigEntry SpecialConfigEntry { get; } = specialConfigEntry; } diff --git a/AquaMai/AquaMai.Config/Attributes/ConfigSectionAttribute.cs b/AquaMai/AquaMai.Config/Attributes/ConfigSectionAttribute.cs index 34ccd639..100c4c44 100644 --- a/AquaMai/AquaMai.Config/Attributes/ConfigSectionAttribute.cs +++ b/AquaMai/AquaMai.Config/Attributes/ConfigSectionAttribute.cs @@ -1,4 +1,5 @@ using System; +using AquaMai.Config.Interfaces; namespace AquaMai.Config.Attributes; @@ -12,9 +13,9 @@ public class ConfigSectionAttribute( bool defaultOn = false, // NOTE: You probably shouldn't use this. Only the "General" section is using this. // Implies defaultOn = true. - bool alwaysEnabled = false) : Attribute + bool alwaysEnabled = false) : Attribute, IConfigSectionAttribute { - public ConfigComment Comment { get; } = new ConfigComment(en, zh); + public IConfigComment Comment { get; } = new ConfigComment(en, zh); public bool ExampleHidden { get; } = exampleHidden; public bool DefaultOn { get; } = defaultOn || alwaysEnabled; public bool AlwaysEnabled { get; } = alwaysEnabled; diff --git a/AquaMai/AquaMai.Config/ConfigSerializer.cs b/AquaMai/AquaMai.Config/ConfigSerializer.cs index dd4c59ed..c6eb2f2e 100644 --- a/AquaMai/AquaMai.Config/ConfigSerializer.cs +++ b/AquaMai/AquaMai.Config/ConfigSerializer.cs @@ -107,7 +107,7 @@ public class ConfigSerializer(IConfigSerializer.Options Options) : IConfigSerial { var entryState = config.GetEntryState(entry); AppendComment(sb, entry.Attribute.Comment); - if (entry.Attribute.SpecialConfigEntry == SpecialConfigEntry.Locale && Options.OverrideLocaleValue) + if (((ConfigEntryAttribute)entry.Attribute).SpecialConfigEntry == SpecialConfigEntry.Locale && Options.OverrideLocaleValue) { AppendEntry(sb, section.Path, entry.Name, Options.Lang); } @@ -151,7 +151,7 @@ public class ConfigSerializer(IConfigSerializer.Options Options) : IConfigSerial } } - private void AppendComment(StringBuilder sb, ConfigComment comment) + private void AppendComment(StringBuilder sb, IConfigComment comment) { if (comment != null) { diff --git a/AquaMai/AquaMai.Config/Reflection/ReflectionManager.cs b/AquaMai/AquaMai.Config/Reflection/ReflectionManager.cs index 54d192a6..f6b28477 100644 --- a/AquaMai/AquaMai.Config/Reflection/ReflectionManager.cs +++ b/AquaMai/AquaMai.Config/Reflection/ReflectionManager.cs @@ -14,14 +14,14 @@ public class ReflectionManager : IReflectionManager public string Path { get; init; } public string Name { get; init; } public IReflectionField Field { get; init; } - public ConfigEntryAttribute Attribute { get; init; } + public IConfigEntryAttribute Attribute { get; init; } } public record Section : IReflectionManager.ISection { public string Path { get; init; } public IReflectionType Type { get; init; } - public ConfigSectionAttribute Attribute { get; init; } + public IConfigSectionAttribute Attribute { get; init; } public List entries; public List Entries => entries.Cast().ToList(); }