diff --git a/IPA.Loader/IConfigProvider.cs b/IPA.Loader/IConfigProvider.cs new file mode 100644 index 00000000..9681c262 --- /dev/null +++ b/IPA.Loader/IConfigProvider.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IPA +{ + /// + /// An interface for configuration providers. + /// + public interface IConfigProvider + { + /// + /// Loads the data provided by this into an object of type . + /// + /// the type of the object to parse into + /// the values from the config provider parsed into the object + T Parse(); + /// + /// Stores the data from into the . + /// + /// + /// NOTE TO IMPLEMENTERS: + /// Since is bundled with this library, try to include support for its attributes. + /// + /// the type of + /// the object containing the data to save + void Store(T obj); + + #region Getters + /// + /// Gets the acting as a sub-object for a given key. + /// + /// the name of the field with the + /// an accessor for the selected sub-object + IConfigProvider GetSubObject(string name); + /// + /// Gets the value of type for key . + /// + /// + /// If is , behavior should be identical to . + /// + /// the type of the value to get + /// the name of the field to get the value of + /// the value of the field + T Get(string name); // can be IConfigProvider + /// + /// The non-generic version of . + /// If key corresponds to a sub-object, will return an . + /// + /// the name of the field to get the value of + /// the value of the field + object Get(string name); // can return IConfigProvider + /// + /// Gets the value of type of the element at . + /// + /// + /// If is , behavior should be identical to if it were executed on the immediate parent of the target element. + /// + /// the type of the value to get + /// an ordered array specifying keys starting from the root (this) + /// the value at path + T GetPath(params string[] path); + /// + /// The non-generic version of . + /// If key corresponds to a sub-object, will return an . + /// + /// an ordered array specifying keys starting from the root (this) + /// the value at path + object GetPath(params string[] path); + #endregion + + #region Setters + /// + /// Sets the object for key '' to . + /// + /// the key to set it as + /// the provider value + void SetSubObject(string name, IConfigProvider provider); // argument should be same provider type + /// + /// Sets the value for key to . + /// + /// + /// If is , behavior should be identical to . + /// + /// the type of the value to set + /// the key + /// the value to set + void Set(string name, T value); + /// + /// Sets the value for path to . + /// + /// + /// If is , behavior should be identical to if it were executed on the immediate parent of the target element. + /// + /// the type of the value to set + /// the path to the new value location + /// the value to set + void SetPath(string[] path, T value); + #endregion + } +} diff --git a/IPA.Loader/IPA.Loader.csproj b/IPA.Loader/IPA.Loader.csproj index 21b93128..b8a4621d 100644 --- a/IPA.Loader/IPA.Loader.csproj +++ b/IPA.Loader/IPA.Loader.csproj @@ -55,6 +55,7 @@ +