Skip to content

Commit

Permalink
Made some code non-static and moved into Serializer
Browse files Browse the repository at this point in the history
  • Loading branch information
Dale Reidy committed Jan 12, 2018
1 parent 311f90a commit 84fb596
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 25 deletions.
4 changes: 2 additions & 2 deletions src/Hatchet/HatchetConvert.Rules.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ namespace Hatchet
public static partial class HatchetConvert
{
private static List<Tuple<Func<DeserializationContext, bool>, Func<DeserializationContext, object>>> DeserializationRules { get; }
private static List<Tuple<Func<object, bool>, Action<SerializationContext>>> SerializationRules { get; }

internal static List<Tuple<Func<object, bool>, Action<SerializationContext>>> SerializationRules { get; }

static HatchetConvert()
{
Expand Down
25 changes: 2 additions & 23 deletions src/Hatchet/HatchetConvert.Serialize.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,31 +24,10 @@ public static string Serialize(object input, SerializeOptions serializeOptions)
var prettyPrinter = new PrettyPrinter(stringBuilder);
var serializer = new Serializer(prettyPrinter, stringBuilder, serializeOptions);

Serialize(input, serializer);
serializer.Serialize(input, serializer);
return stringBuilder.ToString();
}

private static void Serialize(
object input,
Serializer serializer,
bool forceClassName = false)
{
serializer.PushObjectRef(input);

var context = new SerializationContext(input, serializer, forceClassName);

foreach (var conversionFunction in SerializationRules)
{
if (conversionFunction.Item1(input))
{
conversionFunction.Item2(context);
serializer.PopObjectRef(input);
return;
}
}
throw new HatchetException($"Could not serialize {input} of type {input.GetType()}");
}

private static bool IsSimpleValue(Type inputType)
{
return inputType.IsPrimitive
Expand Down Expand Up @@ -226,7 +205,7 @@ private static void SerializeKeyValue(Serializer serializer, string key, object
private static void IndentAndSerialize(Serializer serializer, object value, bool forceClassName)
{
serializer.Indent();
Serialize(value, serializer, forceClassName);
serializer.Serialize(value, serializer, forceClassName);
serializer.Deindent();
}

Expand Down
21 changes: 21 additions & 0 deletions src/Hatchet/Serializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,27 @@ public Serializer(
_metObjects = new List<object>();
}

internal void Serialize(
object input,
Serializer serializer,
bool forceClassName = false)
{
serializer.PushObjectRef(input);

var context = new SerializationContext(input, serializer, forceClassName);

foreach (var conversionFunction in HatchetConvert.SerializationRules)
{
if (conversionFunction.Item1(input))
{
conversionFunction.Item2(context);
serializer.PopObjectRef(input);
return;
}
}
throw new HatchetException($"Could not serialize {input} of type {input.GetType()}");
}

public void PushObjectRef(object obj)
{
var type = obj.GetType();
Expand Down

0 comments on commit 84fb596

Please sign in to comment.