using System;
using System.Collections.Generic;
namespace FullSerializer {
///
/// The direct converter is similar to a regular converter, except that it targets specifically only one type.
/// This means that it can be used without performance impact when discovering converters. It is strongly
/// recommended that you derive from fsDirectConverter{TModel}.
///
/// Due to the way that direct converters operate, inheritance is *not* supported. Direct converters
/// will only be used with the exact ModelType object.
public abstract class fsDirectConverter : fsBaseConverter {
public abstract Type ModelType { get; }
}
public abstract class fsDirectConverter : fsDirectConverter {
public override Type ModelType { get { return typeof(TModel); } }
public sealed override fsResult TrySerialize(object instance, out fsData serialized, Type storageType) {
var serializedDictionary = new Dictionary();
var result = DoSerialize((TModel)instance, serializedDictionary);
serialized = new fsData(serializedDictionary);
return result;
}
public sealed override fsResult TryDeserialize(fsData data, ref object instance, Type storageType) {
var result = fsResult.Success;
if ((result += CheckType(data, fsDataType.Object)).Failed) return result;
var obj = (TModel)instance;
result += DoDeserialize(data.AsDictionary, ref obj);
instance = obj;
return result;
}
protected abstract fsResult DoSerialize(TModel model, Dictionary serialized);
protected abstract fsResult DoDeserialize(Dictionary data, ref TModel model);
}
}