using ChatTwo.Code; using Newtonsoft.Json; namespace ChatTwo.Http.MessageProtocol; #region Outgoing SSE /// /// Contains a valid tab with its assigned index /// public struct ChatTab(string name, int index, uint unreadCount) { [JsonProperty("name")] public string Name = name; [JsonProperty("index")] public int Index = index; [JsonProperty("unreadCount")] public uint UnreadCount = unreadCount; } /// /// Contains a number of tabs that are valid for the user to pick from /// public struct ChatTabList(ChatTab[] tabs) { [JsonProperty("tabs")] public ChatTab[] Tabs = tabs; } /// /// Contains a valid tab index and the current unread state as a number unread of messages /// public struct ChatTabUnreadState(int index, uint unreadCount) { [JsonProperty("index")] public int Index = index; [JsonProperty("unreadCount")] public uint UnreadCount = unreadCount; } /// /// Contains the current channel name /// public struct SwitchChannel((MessageTemplate[] Name, bool Locked) channel) { [JsonProperty("channelName")] public MessageTemplate[] ChannelName = channel.Name; [JsonProperty("channelLocked")] public bool Locked = channel.Locked; } /// /// Contains a number of channels that are valid for the user to pick from /// public struct ChannelList(Dictionary channels) { [JsonProperty("channels")] public Dictionary Channels = channels; } /// /// Contains one or multiple messages /// public struct Messages(MessageResponse[] set) { [JsonProperty("messages")] public MessageResponse[] Set = set; } /// /// Contains a single message with all its templates and a timestamp /// public struct MessageResponse() { [JsonProperty("id")] public Guid Id = Guid.Empty; [JsonProperty("timestamp")] public string Timestamp = ""; [JsonProperty("templates")] public MessageTemplate[] Templates = []; } /// /// Template that is used for the channel name or any message posted to the chatlog /// public struct MessageTemplate() { /// /// The type of payload. /// Dalamuds enum is just a baseline, there exists more that are expressed through raw values. /// [JsonProperty("payloadType")] public WebPayloadType PayloadType = WebPayloadType.Unknown; /// /// Used for text and emote. /// [JsonProperty("content")] public string Content = ""; /// /// Used for an icon. /// [JsonProperty("iconId")] public uint IconId; /// /// Used for text and url /// /// Note: /// 0 is used for invalid colors /// [JsonProperty("color")] public uint Color; public static MessageTemplate Empty => new(); } #endregion #region Outgoing POST public struct OkResponse(string message) { [JsonProperty("message")] public string Message = message; } public struct ErrorResponse(string reason) { [JsonProperty("reason")] public string Reason = reason; } #endregion #region Incoming POST /// /// Message must fulfill the posting requirement /// Greater than or equal 2 characters /// Less than or equal 500 characters /// public struct IncomingMessage() { [JsonProperty("message")] public string Message = string.Empty; } /// /// The channel type must be a valid /// public struct IncomingChannel() { [JsonProperty("channel")] public InputChannel Channel = InputChannel.Invalid; } /// /// The tabs index must be a valid int /// public struct IncomingTab() { [JsonProperty("index")] public int Index = -1; } #endregion