using System.Collections.Immutable; using System.Text.Json; namespace StellaOps.Concelier.RawModels; public static class RawDocumentFactory { public static AdvisoryRawDocument CreateAdvisory( string tenant, RawSourceMetadata source, RawUpstreamMetadata upstream, RawContent content, RawIdentifiers identifiers, RawLinkset linkset, string? supersedes = null) { var clonedContent = content with { Raw = Clone(content.Raw) }; return new AdvisoryRawDocument(tenant, source, upstream, clonedContent, identifiers, linkset, supersedes); } public static VexRawDocument CreateVex( string tenant, RawSourceMetadata source, RawUpstreamMetadata upstream, RawContent content, RawLinkset linkset, ImmutableArray statements, string? supersedes = null) { var clonedContent = content with { Raw = Clone(content.Raw) }; return new VexRawDocument(tenant, source, upstream, clonedContent, linkset, statements, supersedes); } private static JsonElement Clone(JsonElement element) { using var document = JsonDocument.Parse(element.GetRawText()); return document.RootElement.Clone(); } }