mirror of https://github.com/hykilpikonna/AquaDX
[+] Add some interfaces for attributes
parent
0ec048ceba
commit
792dce6843
|
@ -0,0 +1,8 @@
|
|||
namespace AquaMai.Config.Interfaces;
|
||||
|
||||
public interface IConfigComment
|
||||
{
|
||||
string CommentEn { get; init; }
|
||||
string CommentZh { get; init; }
|
||||
public string GetLocalized(string lang);
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
namespace AquaMai.Config.Interfaces;
|
||||
|
||||
public interface IConfigEntryAttribute
|
||||
{
|
||||
IConfigComment Comment { get; }
|
||||
bool HideWhenDefault { get; }
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
namespace AquaMai.Config.Interfaces;
|
||||
|
||||
public interface IConfigSectionAttribute
|
||||
{
|
||||
IConfigComment Comment { get; }
|
||||
bool ExampleHidden { get; }
|
||||
bool DefaultOn { get; }
|
||||
bool AlwaysEnabled { get; }
|
||||
}
|
|
@ -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<IEntry> Entries { get; }
|
||||
public IConfigSectionAttribute Attribute { get; init; }
|
||||
}
|
||||
|
||||
public IEnumerable<ISection> Sections { get; }
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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<Entry> entries;
|
||||
public List<IReflectionManager.IEntry> Entries => entries.Cast<IReflectionManager.IEntry>().ToList();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue