using System.Text.Json;
using System.Text.Json.Serialization;
namespace Ghost.Editor.Core.AssetHandle;
///
/// Metadata for an asset, stored in .gmeta files.
/// Contains GUID, version, tags, and importer settings.
/// FileHash and Dependencies are stored in the database only, not in .gmeta files.
///
internal class AssetMeta
{
///
/// Unique identifier for the asset.
///
[JsonPropertyName("Guid")]
public Guid Guid
{
get;
set;
}
///
/// Version of the asset pipeline (not the asset itself).
/// Used for migration when the asset pipeline is redesigned.
///
[JsonPropertyName("Version")]
public int Version
{
get;
set;
} = 1;
///
/// Tags for categorizing and searching assets.
///
[JsonPropertyName("Tags")]
public List Tags
{
get;
set;
} = new();
///
/// Importer settings specific to this asset.
/// The key is the importer type name, and the value is a JSON element containing the settings.
/// Use GetImporterSettings<T>() and SetImporterSettings<T>() to work with strongly-typed settings.
///
[JsonPropertyName("ImporterSettings")]
public Dictionary ImporterSettings
{
get;
set;
} = new();
///
/// Get importer settings of a specific type.
///
public T? GetImporterSettings(string importerName) where T : ImporterSettings
{
if (ImporterSettings.TryGetValue(importerName, out var element))
{
return element.Deserialize();
}
return null;
}
///
/// Set importer settings.
///
public void SetImporterSettings(string importerName, T settings) where T : ImporterSettings
{
var element = JsonSerializer.SerializeToElement(settings);
ImporterSettings[importerName] = element;
}
///
/// Set importer settings (non-generic overload).
///
internal void SetImporterSettings(string importerName, ImporterSettings settings)
{
var element = JsonSerializer.SerializeToElement(settings, settings.GetType());
ImporterSettings[importerName] = element;
}
}