using System;
using System.Collections.Generic;
using FullSerializer.Internal;
namespace FullSerializer {
///
/// This class allows arbitrary code to easily register global converters. To
/// add a converter, simply declare a new field called "Register_*" that
/// stores the type of converter you would like to add. Alternatively, you
/// can do the same with a method called "Register_*"; just add the converter
/// type to the `Converters` list.
///
public partial class fsConverterRegistrar {
static fsConverterRegistrar() {
Converters = new List();
foreach (var field in typeof(fsConverterRegistrar).GetDeclaredFields()) {
if (field.Name.StartsWith("Register_"))
Converters.Add(field.FieldType);
}
foreach (var method in typeof(fsConverterRegistrar).GetDeclaredMethods()) {
if (method.Name.StartsWith("Register_"))
method.Invoke(null, null);
}
// Make sure we do not use any AOT Models which are out of date.
var finalResult = new List(Converters);
foreach (Type t in Converters) {
object instance = null;
try {
instance = Activator.CreateInstance(t);
} catch (Exception) {}
var aotConverter = instance as fsIAotConverter;
if (aotConverter != null) {
var modelMetaType = fsMetaType.Get(new fsConfig(), aotConverter.ModelType);
if (fsAotCompilationManager.IsAotModelUpToDate(modelMetaType, aotConverter) == false) {
finalResult.Remove(t);
}
}
}
Converters = finalResult;
}
public static List Converters;
// Example field registration:
//public static AnimationCurve_DirectConverter Register_AnimationCurve_DirectConverter;
// Example method registration:
//public static void Register_AnimationCurve_DirectConverter() {
// Converters.Add(typeof(AnimationCurve_DirectConverter));
//}
}
}