using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
namespace Sandbox.Resources;
///
/// A JSON definition of an embedded resource. This is a resource that can be either standalone (in a .vtex file) or
/// embedded in a GameResource's Json data.
///
/// When it's detected in a GameResource we will create the named compiler and create the resource. When compiling the
/// GameResource this can optionally create a compiled version of the resource on disk.
///
/// When we compile a regular resource that contains this $compiler structure, it operates like any other compile, except
/// it's totally managed by c# instead of resourcecompiler.
///
public struct EmbeddedResource
{
///
/// The name of the ResourceCompiler to use
///
[JsonPropertyName( "$compiler" )]
public string ResourceCompiler { get; set; }
///
/// The name of the ResourceGenerator that created this resource. This is basically a sub-compiler.
///
[JsonPropertyName( "$source" )]
public string ResourceGenerator { get; set; }
///
/// Sometimes we'll want to embed a child class of a resource
///
[JsonPropertyName( $"$type" ), JsonIgnore( Condition = JsonIgnoreCondition.WhenWritingNull )]
public string TypeName { get; set; }
///
/// Data that is serialized/deserialized from the ResourceGenerator
///
[JsonPropertyName( "data" )]
public JsonObject Data { get; set; }
///
/// If this resource has been compiled to disk then this is the path to that resource.
/// This avoids the need to generate this resource again.
///
[JsonPropertyName( "compiled" )]
public string CompiledPath { get; set; }
}