namespace DiscordBotCore.Configuration;
public interface IConfiguration
{
///
/// Adds an element to the custom settings dictionary
///
/// The key
/// The value
void Add(string key, object value);
///
/// Sets the value of a key in the custom settings dictionary
///
/// The key
/// The value
void Set(string key, object value);
///
/// Gets the value of a key in the custom settings dictionary. If the T type is different then the object type, it will try to convert it.
///
/// The key
/// The default value to be returned if the searched value is not found
/// The type of the returned value
///
T Get(string key, T defaultObject);
///
/// Gets the value of a key in the custom settings dictionary. If the T type is different then the object type, it will try to convert it.
///
/// The key
/// The type of the returned value
///
T? Get(string key);
///
/// Get a list of values from the custom settings dictionary
///
/// The key
/// The default list to be returned if nothing is found
/// The type of the returned value
///
List GetList(string key, List defaultObject);
///
/// Remove a key from the custom settings dictionary
///
/// The key
void Remove(string key);
///
/// Get the enumerator of the custom settings dictionary
///
///
IEnumerator> GetEnumerator();
///
/// Clear the custom settings dictionary
///
void Clear();
///
/// Check if the custom settings dictionary contains a key
///
/// The key
///
bool ContainsKey(string key);
///
/// Filter the custom settings dictionary based on a predicate
///
/// The predicate
///
IEnumerable> Where(Func, bool> predicate);
///
/// Filter the custom settings dictionary based on a predicate
///
/// The predicate
IEnumerable> Where(Func, int, bool> predicate);
///
/// Filter the custom settings dictionary based on a predicate
///
/// The predicate
IEnumerable Where(Func, TResult> selector);
///
/// Filter the custom settings dictionary based on a predicate
///
/// The predicate
IEnumerable Where(Func, int, TResult> selector);
///
/// Get the first element of the custom settings dictionary based on a predicate
///
/// The predicate
KeyValuePair FirstOrDefault(Func, bool> predicate);
///
/// Get the first element of the custom settings dictionary
///
///
KeyValuePair FirstOrDefault();
///
/// Checks if the custom settings dictionary contains all the keys
///
/// A list of keys
///
bool ContainsAllKeys(params string[] keys);
///
/// Try to get the value of a key in the custom settings dictionary
///
/// The key
/// The value
///
bool TryGetValue(string key, out object? value);
///
/// Save the custom settings dictionary to a file
///
///
Task SaveToFile();
///
/// Load the custom settings dictionary from a file
///
///
void LoadFromFile();
}