namespace Vellum.UnitTests { public interface ICarnivore { } public interface IPredator : ICarnivore { } public interface IAquatic { } public interface IVessel { } // The generator reports the types that two unrelated interface families both save, and the pragma silences it. #pragma warning disable VEL0014, VEL0015 public class Shark : ICarnivore, IAquatic { } public class Lynx : ICarnivore { } public class Gryphon : Creature, ICarnivore { } public class Orca : IPredator { } public class Otter : IAquatic { } public struct Sprat : IAquatic { } public abstract class AbstractAquatic : IAquatic { } public class Cod : AbstractAquatic { } public class Barrel : IVessel { } public class Twin : IVessel, IVessel { } #pragma warning restore VEL0014, VEL0015 public class CarnivoreConverter : SaveConverter where CarnivoreType : ICarnivore { public override SaveNode Write(CarnivoreType value, SaveSession session) { return SaveNode.OfText("carnivore"); } public override CarnivoreType Read(SaveNode node, SaveSession session) { return (CarnivoreType)System.Activator.CreateInstance(typeof(CarnivoreType)); } } public class PredatorConverter : SaveConverter where PredatorType : IPredator { public override SaveNode Write(PredatorType value, SaveSession session) { return SaveNode.OfText("predator"); } public override PredatorType Read(SaveNode node, SaveSession session) { return (PredatorType)System.Activator.CreateInstance(typeof(PredatorType)); } } public class AquaticConverter : SaveConverter where AquaticType : IAquatic { public override SaveNode Write(AquaticType value, SaveSession session) { return SaveNode.OfText("aquatic"); } public override AquaticType Read(SaveNode node, SaveSession session) { return (AquaticType)System.Activator.CreateInstance(typeof(AquaticType)); } } /// /// A family of an interface every built-in type implements. It and its twin below are duplicates on purpose, so /// the generator leaves both out of the assembly's converters and only tests that ask for it get either. /// #pragma warning disable VEL0002 public class ComparableTwinConverter : SaveConverter where ComparableType : System.IComparable { public override SaveNode Write(ComparableType value, SaveSession session) { return SaveNode.Null; } public override ComparableType Read(SaveNode node, SaveSession session) { return default(ComparableType); } } public class ComparableConverter : SaveConverter where ComparableType : System.IComparable { public override SaveNode Write(ComparableType value, SaveSession session) { return SaveNode.OfText("comparable"); } public override ComparableType Read(SaveNode node, SaveSession session) { return default(ComparableType); } } #pragma warning restore VEL0002 public class VesselConverter : SaveConverter where VesselType : IVessel { public override SaveNode Write(VesselType value, SaveSession session) { return SaveNode.OfText("vessel of " + typeof(ItemType).Name); } public override VesselType Read(SaveNode node, SaveSession session) { return (VesselType)System.Activator.CreateInstance(typeof(VesselType)); } } }