public static void FillRandom <T>(ref T instance, FillArgs args, PartFlags flags, string partName) { if (flags.IsSet(PartFlags.Dynamic)) { args.RaiseSkippedWarning(partName, "dynamic or polymorphic fields can't be filled"); instance = default(T); return; } if (args.BeginDeferredFill <T>()) { var tester = BarfSerializers.GetTester <T>(flags); tester.Fill(ref instance, args); args.EndDeferredFill <T>(); } }
public static void AssertAreEqual <T>(T expected, T actual, PartFlags flags, AssertArgs args, string partName) { if (flags.IsSet(PartFlags.Dynamic)) { if (expected == null) { Assert.AreEqual(null, actual); return; } Assert.AreEqual(expected.GetType(), actual.GetType(), partName); var tester = BarfSerializers.GetTester(expected.GetType(), flags & ~PartFlags.Dynamic); tester.AssertAreEqual(expected, actual, args); } else { var tester = BarfSerializers.GetTester <T>(flags); tester.AssertAreEqual(expected, actual, args); } }
public static void WritePart <T>(T part, BarfSerializationArgs args, PartFlags flags) { if (flags.IsSet(PartFlags.Dynamic)) { if (!typeof(T).IsValueType && part == null) { args.Writer.WriteVarInt32(-1); } else { var type = part.GetType(); args.Writer.WriteVarInt32(args.TypeTable.Include(type)); var serializer = BarfSerializers.Get(type, flags & ~PartFlags.Dynamic); serializer.SerializeObject(part, args); } } else { BarfSerializers.Get <T>(flags).Serialize(part, args); } }
public static void ReadPart <T>(ref T instance, BarfDeserializationArgs args, PartFlags flags) { if (flags.IsSet(PartFlags.Dynamic)) { var index = args.Reader.ReadVarInt32(); if (index < 0) { instance = default(T); } else { var type = args.TypeTable.GetType(index); var serializer = BarfSerializers.Get(type, flags & ~PartFlags.Dynamic); object obj = instance; serializer.InnerDeserializeObject(ref obj, args); instance = (T)obj; } } else { BarfSerializers.Get <T>(flags).InnerDeserialize(ref instance, args); } }