namespace Prefab.Base;
///
/// Contract for models that expose a customizable attribute bag to module developers.
///
public interface ICanBeCustomized : IHasGenericAttributes
{
///
/// Sets or updates a custom attribute value.
///
/// The attribute name.
/// The value to store.
void SetAttribute(string key, object value);
///
/// Removes a custom attribute by key.
///
/// The attribute to remove.
/// true when the key existed and was removed.
bool RemoveAttribute(string key);
///
/// Attempts to read an attribute value.
///
/// The attribute to inspect.
/// Receives the typed attribute value when present.
/// The expected attribute type.
/// true when the attribute exists and matches the requested type.
bool TryGetAttribute(string key, out T value);
}