using System; using System.Collections.Generic; using HeuristicLab.Persistence.Core; namespace HeuristicLab.Persistence.Interfaces { public interface ICompositeSerializer { /// /// Defines the Priorty of this composite serializer. Higher number means /// higher prioriy. Negative numbers are fallback serializers. /// All default generic composite serializers have priority 100. Specializations /// have priority 200 so they will be tried first. Priorities are /// only considered for default configurations. /// int Priority { get; } /// /// Determines for every type whether the composite serializer is applicable. /// bool CanSerialize(Type type); /// /// Give a reason if possibly why the given type cannot be serialized by this /// ICompositeSerializer. /// string JustifyRejection(Type type); /// /// Generate MetaInfo necessary for instance creation. (i.e. /// array dimensions). /// IEnumerable CreateMetaInfo(object obj); /// /// Decompose an object into KeyValuePairs, the Key can be null, /// the order in which elements are generated is guaranteed to be /// the same as they will be supplied to the Populate method. /// IEnumerable Decompose(object obj); /// /// Create an instance of the object using the provided meta information. /// /// /// object CreateInstance(Type type, IEnumerable metaInfo); /// /// Compose an object from the KeyValuePairs previously generated /// in DeCompose. The order in which the values are supplied is /// the same as they where generated. Keys might be null. /// void Populate(object instance, IEnumerable tags, Type type); } }