74 lines
3.6 KiB
C#
74 lines
3.6 KiB
C#
using System.Text.Json;
|
|
|
|
namespace HellionChat.Themes;
|
|
|
|
internal static class ThemeJsonWriter
|
|
{
|
|
public static string Serialize(Theme theme)
|
|
{
|
|
using var ms = new MemoryStream();
|
|
using (var writer = new Utf8JsonWriter(ms, new JsonWriterOptions { Indented = true }))
|
|
{
|
|
writer.WriteStartObject();
|
|
writer.WriteNumber("schemaVersion", ThemeJsonLoader.SupportedSchemaVersion);
|
|
writer.WriteString("slug", theme.Slug);
|
|
writer.WriteString("name", theme.Name);
|
|
writer.WriteString("author", theme.Author);
|
|
writer.WriteString("description", theme.Description);
|
|
|
|
writer.WriteStartObject("colors");
|
|
WriteColor(writer, "primaryDark", theme.Colors.PrimaryDark);
|
|
WriteColor(writer, "primary", theme.Colors.Primary);
|
|
WriteColor(writer, "primaryLight", theme.Colors.PrimaryLight);
|
|
WriteColor(writer, "primaryGlow", theme.Colors.PrimaryGlow);
|
|
WriteColor(writer, "accentDark", theme.Colors.AccentDark);
|
|
WriteColor(writer, "accent", theme.Colors.Accent);
|
|
WriteColor(writer, "accentLight", theme.Colors.AccentLight);
|
|
WriteColor(writer, "identity", theme.Colors.Identity);
|
|
WriteColor(writer, "windowBg", theme.Colors.WindowBg);
|
|
WriteColor(writer, "childBg", theme.Colors.ChildBg);
|
|
WriteColor(writer, "frameBg", theme.Colors.FrameBg);
|
|
WriteColor(writer, "surface", theme.Colors.Surface);
|
|
WriteColor(writer, "surfaceHover", theme.Colors.SurfaceHover);
|
|
WriteColor(writer, "border", theme.Colors.Border);
|
|
WriteColor(writer, "textPrimary", theme.Colors.TextPrimary);
|
|
WriteColor(writer, "textMuted", theme.Colors.TextMuted);
|
|
WriteColor(writer, "textDim", theme.Colors.TextDim);
|
|
WriteColor(writer, "statusSuccess", theme.Colors.StatusSuccess);
|
|
WriteColor(writer, "statusDanger", theme.Colors.StatusDanger);
|
|
WriteColor(writer, "statusWarning", theme.Colors.StatusWarning);
|
|
WriteColor(writer, "statusInfo", theme.Colors.StatusInfo);
|
|
writer.WriteEndObject();
|
|
|
|
writer.WriteStartObject("layout");
|
|
writer.WriteNumber("windowRounding", theme.Layout.WindowRounding);
|
|
writer.WriteNumber("childRounding", theme.Layout.ChildRounding);
|
|
writer.WriteNumber("popupRounding", theme.Layout.PopupRounding);
|
|
writer.WriteNumber("frameRounding", theme.Layout.FrameRounding);
|
|
writer.WriteNumber("grabRounding", theme.Layout.GrabRounding);
|
|
writer.WriteNumber("tabRounding", theme.Layout.TabRounding);
|
|
writer.WriteNumber("scrollbarRounding", theme.Layout.ScrollbarRounding);
|
|
writer.WriteNumber("windowBorderSize", theme.Layout.WindowBorderSize);
|
|
writer.WriteNumber("frameBorderSize", theme.Layout.FrameBorderSize);
|
|
writer.WriteEndObject();
|
|
|
|
if (theme.ChatColors is { Channels.Count: > 0 } cc)
|
|
{
|
|
writer.WriteStartObject("chatChannels");
|
|
foreach (var kvp in cc.Channels)
|
|
writer.WriteString(kvp.Key.ToString(), $"#{kvp.Value:X8}");
|
|
writer.WriteEndObject();
|
|
}
|
|
|
|
writer.WriteEndObject();
|
|
}
|
|
|
|
return System.Text.Encoding.UTF8.GetString(ms.ToArray());
|
|
}
|
|
|
|
private static void WriteColor(Utf8JsonWriter writer, string key, uint rgba)
|
|
{
|
|
writer.WriteString(key, $"#{rgba:X8}");
|
|
}
|
|
}
|