Beispiel #1
0
        private static TomlObject CreateArrayType(ITomlRoot root, IEnumerable e)
        {
            var et = e.GetElementType();

            if (et != null)
            {
                var conv = root.Settings.TryGetToTomlConverter(et);
                if (conv != null)
                {
                    if (conv.CanConvertTo(typeof(TomlValue)))
                    {
                        var values = e.Select((o) => (TomlValue)conv.Convert(root, o, Types.TomlValueType));
                        return(new TomlArray(root, values.ToArray()));
                    }
                    else if (conv.CanConvertTo(typeof(TomlTable)))
                    {
                        return(new TomlTableArray(root, e.Select((o) => (TomlTable)conv.Convert(root, o, Types.TomlTableType))));
                    }
                    else
                    {
                        throw new NotSupportedException(
                                  $"Cannot create array type from enumerable with element type {et.FullName}");
                    }
                }
                else
                {
                    return(new TomlTableArray(root, e.Select((o) =>
                                                             TomlTable.CreateFromClass(root, o, root.Settings.GetTableType(et)))));
                }
            }

            return(new TomlArray(root));
        }
Beispiel #2
0
        public static TomlTable CreateAttachedTableFromClass <T>(
            this TomlObject rootSource, T obj, TomlTable.TableTypes type = TomlTable.TableTypes.Default)
            where T : class
        {
            if (obj is TomlObject)
            {
                throw new InvalidOperationException(
                          $"Can't create TOML table from object of type '{obj.GetType().FullName}'. " +
                          "A TOML table can only be created from non TOML objects.");
            }

            var t = TomlTable.CreateFromClass(rootSource.Root, obj, type);

            return(t);
        }
Beispiel #3
0
        internal static TomlObject CreateFrom(ITomlRoot root, object val, PropertyInfo pi)
        {
            var t         = val.GetType();
            var converter = root.Settings.TryGetToTomlConverter(t);

            if (converter != null)
            {
                return((TomlObject)converter.Convert(root, val, Types.TomlObjectType));
            }
            else if (val as IDictionary != null)
            {
                return(TomlTable.CreateFromDictionary(root, (IDictionary)val, root.Settings.GetTableType(t)));
            }
            else if (t != Types.StringType && (val as IEnumerable) != null)
            {
                return(CreateArrayType(root, (IEnumerable)val));
            }
            else
            {
                var tableType = root.Settings.GetTableType(t);
                return(TomlTable.CreateFromClass(root, val, tableType));
            }
        }