#region License Information
/* HeuristicLab
* Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
*
* This file is part of HeuristicLab.
*
* HeuristicLab is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* HeuristicLab is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with HeuristicLab. If not, see .
*/
#endregion
using System;
using System.Collections.Generic;
using HeuristicLab.Persistence.Core;
namespace HeuristicLab.Persistence.Interfaces {
///
/// A composite serializer does not directly transform an object into its
/// serialized form. It merely decomposes into other objects, that can
/// later be used to recompose the same object.
///
public interface ICompositeSerializer {
///
/// Defines the Priorty of this composite serializer. Higher number means
/// higher prioriy. Negative numbers are fallback serializers that are
/// disabled by default.
///
/// 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.
///
/// The type.
///
/// true if this instance can serialize the specified type; otherwise, false.
///
bool CanSerialize(Type type);
///
/// Give a reason if possibly why the given type cannot be serialized by this
/// ICompositeSerializer.
///
/// The type.
/// A string justifying why type cannot be serialized.
string JustifyRejection(Type type);
///
/// Generate MetaInfo necessary for instance creation. (e.g. dimensions
/// necessary for array creation.
///
/// An object.
/// An enumerable of s.
IEnumerable CreateMetaInfo(object obj);
///
/// Decompose an object into s, the tag name 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.
///
/// An object.
/// An enumerable of s.
IEnumerable Decompose(object obj);
///
/// Create an instance of the object using the provided meta information.
///
/// A type.
/// The meta information.
/// A fresh instance of the provided type.
object CreateInstance(Type type, IEnumerable metaInfo);
///
/// Fills an object with values from the previously generated s
/// in Decompose. The order in which the values are supplied is
/// the same as they where generated. names might be null.
///
/// An empty object instance.
/// The tags.
/// The type.
void Populate(object instance, IEnumerable tags, Type type);
}
}