using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IPA.Config.Data { /// /// A base value type for config data abstract representations, to be serialized with an /// . If a is , then /// that represents just that: a null in whatever serialization is being used. /// Also contains factory functions for all derived types. /// public abstract class Value { /// /// Converts this into a human-readable format. /// /// a human-readable string containing the value provided public abstract override string ToString(); /// /// Creates a Null . /// /// public static Value Null() => null; /// /// Creates an empty . /// /// an empty /// public static List List() => new List(); /// /// Creates an empty . /// /// an empty /// /// public static Map Map() => new Map(); /// /// Creates a new representing a . /// /// the value to wrap /// a wrapping /// public static Text From(string val) => Text(val); /// /// Creates a new object wrapping a . /// /// the value to wrap /// a wrapping /// public static Text Text(string val) => val == null ? new Text { Value = val } : null; /// /// Creates a new wrapping a . /// /// the value to wrap /// a wrapping /// public static Integer From(long val) => Integer(val); /// /// Creates a new wrapping a . /// /// the value to wrap /// a wrapping /// public static Integer Integer(long val) => new Integer { Value = val }; /// /// Creates a new wrapping a . /// /// the value to wrap /// a wrapping /// public static FloatingPoint From(double val) => Float(val); /// /// Creates a new wrapping a . /// /// the value to wrap /// a wrapping /// public static FloatingPoint Float(double val) => new FloatingPoint { Value = val }; /// /// Creates a new wrapping a . /// /// the value to wrap /// a wrapping /// public static Boolean From(bool val) => Bool(val); /// /// Creates a new wrapping a . /// /// the value to wrap /// a wrapping /// public static Boolean Bool(bool val) => new Boolean { Value = val }; /// /// Creates a new holding the content of an /// of . /// /// the s to initialize the with /// a containing the content of /// public static List From(IEnumerable vals) { if (vals == null) return null; var l = List(); l.AddRange(vals); return l; } /// /// Creates a new holding the content of an /// of to . /// /// the dictionary of s to initialize the wtih /// a containing the content of /// /// public static Map From(IDictionary vals) => From(vals as IEnumerable>); /// /// Creates a new holding the content of an /// of of to . /// /// the enumerable of of name to /// a containing the content of /// /// public static Map From(IEnumerable> vals) { if (vals == null) return null; var m = Map(); foreach (var v in vals) m.Add(v.Key, v.Value); return m; } } }