using System; using System.Collections.Generic; using Assets.Exceptions; namespace Assets.Common { [Serializable] public class Metadata { private readonly Dictionary<string, object> _properties = new Dictionary<string, object>(); public bool HasProperty(string name) => _properties.ContainsKey(name); public bool HasProperty<T>(string name) => HasProperty(name) && _properties[name] is T; public void SetProperty<T>(string name, T property) { _properties[name] = property; } public T GetProperty<T>(string name) { if (!HasProperty(name)) throw new PropertyAccessException($"Property named \"{name}\" does not exist in this site."); var property = _properties[name]; if (property is T value) return value; throw new PropertyAccessException($"Property named \"{name}\" is of type {property.GetType()} not {typeof(T)}."); } } }