using System;
using System.Collections.Generic;
using ZeroLevel.Services.Serialization;
namespace ZeroLevel
{
///
/// Configuration section
///
public interface IConfiguration :
IEquatable,
IBinarySerializable
{
#region Properties
///
/// Get values by key
///
IEnumerable this[string key] { get; }
///
/// Keys
///
IEnumerable Keys { get; }
///
/// Configuration is locked for change when true
///
bool Freezed { get; }
#endregion Properties
#region Methods
///
/// Get values by key
///
/// Key
/// Values list
IEnumerable Items(string key);
///
/// Get first value by key
///
string First(string key);
///
/// Get first value by key with cast to
///
T First(string key);
///
/// Get first or default value by key
///
string FirstOrDefault(string name, string defaultValue);
///
/// Get first or default value by key with cast to
///
T FirstOrDefault(string name);
///
/// Get first or default value by key with cast to
///
T FirstOrDefault(string name, T defaultValue);
///
/// Check key exists
///
bool Contains(string key);
///
/// Check one of key exists
///
bool Contains(params string[] keys);
///
/// true if exists one or more values by key
///
bool ContainsValue(string key, string value);
///
/// Count values by key
///
int Count(string key);
///
/// Do action if key exists, action takes first value
///
void DoWithFirst(string key, Action action);
///
/// Do action if key exists, action takes first value with cast to
///
void DoWithFirst(string key, Action action);
#endregion Methods
#region Create, Clean, Delete
///
/// Clean
///
IConfiguration Clear();
///
/// Clean values by key
///
IConfiguration Clear(string key);
///
/// Remove key and binded values
///
IConfiguration Remove(string key);
///
/// Append key and value
///
IConfiguration Append(string key, string value);
///
/// Append key and values list
///
IConfiguration Append(string key, IEnumerable values);
///
/// Set key with one value, if any values by key exists, they will be dropped
///
IConfiguration SetUnique(string key, string value);
///
/// Sets a prohibition on changing
///
/// false - prohibition was set already
bool Freeze(bool permanent = false);
///
/// Remove a prohibition on changing
///
bool Unfreeze();
#endregion Create, Clean, Delete
void CopyTo(IConfiguration config);
T Bind();
object Bind(Type type);
}
}