using System.Text.Json.Serialization; namespace Nuuru.Server.DTOs.BBCode; [JsonPolymorphic(TypeDiscriminatorPropertyName = "type")] [JsonDerivedType(typeof(TextNodeDto), "text")] [JsonDerivedType(typeof(NewlineNodeDto), "newline")] [JsonDerivedType(typeof(ElementNodeDto), "element")] [JsonDerivedType(typeof(ThumbNodeDto), "thumb")] [JsonDerivedType(typeof(UrlNodeDto), "url")] [JsonDerivedType(typeof(QuoteNodeDto), "quote")] [JsonDerivedType(typeof(MentionNodeDto), "mention")] [JsonDerivedType(typeof(AttachmentNodeDto), "attachment")] [JsonDerivedType(typeof(EmoteNodeDto), "emote")] public abstract class BbNodeDto; public class TextNodeDto : BbNodeDto { public required string Content { get; set; } } public class NewlineNodeDto : BbNodeDto; public class ElementNodeDto : BbNodeDto { public required string Tag { get; set; } public string? Attribute { get; set; } public required List Children { get; set; } } public class ThumbNodeDto : BbNodeDto { public required int PostId { get; set; } } public class UrlNodeDto : BbNodeDto { public required string Href { get; set; } public required List Children { get; set; } } public class QuoteNodeDto : BbNodeDto { public required string SourceType { get; set; } public required string SourceId { get; set; } public string? Author { get; set; } public string? Hash { get; set; } public required List Children { get; set; } } public class MentionNodeDto : BbNodeDto { public required string UserId { get; set; } public required string UserName { get; set; } } public class AttachmentNodeDto : BbNodeDto { public required string AttachmentId { get; set; } public bool IsThumbnail { get; set; } public int? Width { get; set; } public int? Height { get; set; } } public class EmoteNodeDto : BbNodeDto { public required string Name { get; set; } } public class ParseResponse { public required List Nodes { get; set; } }