internal static T Parse <T>(StreamReader streamReader)
        {
            var deserializer = new DeserializerBuilder();

            deserializer.WithTypeConverter(new YamlTypeConverterRegex());
            deserializer.WithTypeConverter(new YamlTypeConverterTupleRegexString());
            deserializer.WithNodeDeserializer(inner => new ValidatingNodeDeserializer(inner), s => s.InsteadOf <ObjectNodeDeserializer>());
            return(deserializer.Build().Deserialize <T>(streamReader));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Verifies the content of the given file, treating it as a transformation file.
        /// </summary>
        /// <param name="file">The path to the file.</param>
        /// <typeparam name="T">The class to verify the file as.</typeparam>
        /// <returns>A condition result, which may or may not have succeeded.</returns>
        public DetermineConditionResult VerifyFile <T>(string file)
        {
            using var sr = new StreamReader(File.OpenRead(file));
            var deserB = new DeserializerBuilder()
                         .WithTypeConverter(new ColourYamlConverter())
                         .WithNodeDeserializer(i => new ValidatingNodeDeserializer(i), s => s.InsteadOf <ObjectNodeDeserializer>())
                         .WithNamingConvention(UnderscoredNamingConvention.Instance);

            if (typeof(T) != typeof(Species))
            {
                deserB = deserB.WithTypeConverter(new RawSpeciesYamlConverter());
            }

            var deser = deserB.Build();

            var content = sr.ReadToEnd();

            try
            {
                deser.Deserialize <T>(content);
            }
            catch (YamlException yex)
            {
                return(DetermineConditionResult.FromError(yex, Path.GetFileName(file)));
            }

            return(DetermineConditionResult.FromSuccess());
        }
    /// <summary>
    /// Verifies the content of the given file, treating it as a transformation file.
    /// </summary>
    /// <param name="file">The path to the file.</param>
    /// <typeparam name="T">The class to verify the file as.</typeparam>
    /// <returns>A condition result, which may or may not have succeeded.</returns>
    public static Result VerifyFile <T>(string file)
    {
        using var sr = new StreamReader(File.OpenRead(file));
        var builder = new DeserializerBuilder()
                      .WithTypeConverter(new ColourYamlConverter())
                      .WithTypeConverter(new EnumYamlConverter <Pattern>())
                      .WithTypeConverter(new NullableEnumYamlConverter <Pattern>())
                      .WithNodeDeserializer(i => new ValidatingNodeDeserializer(i), s => s.InsteadOf <ObjectNodeDeserializer>())
                      .WithNamingConvention(UnderscoredNamingConvention.Instance);

        if (typeof(T) != typeof(Species))
        {
            builder = builder.WithTypeConverter(new RawSpeciesYamlConverter());
        }

        var deserializer = builder.Build();

        var content = sr.ReadToEnd();

        try
        {
            deserializer.Deserialize <T>(content);
        }
        catch (YamlException yex)
        {
            return(yex);
        }

        return(Result.FromSuccess());
    }
        public static IDeserializer GetDeserializer(string filePath = null)
        {
            // if (_desrializer != null) {
            //     return _desrializer;
            // }
            var builder = new DeserializerBuilder();

            builder = builder
                      .IgnoreFields()
                      .IgnoreUnmatchedProperties()
                      .WithNamingConvention(CamelCaseNamingConvention.Instance);
            if (RegisteredTags?.Count > 0)
            {
                foreach (var t in RegisteredTags)
                {
                    var type   = t.GetType();
                    var tagKey = type.GetCustomAttributes(typeof(YamlTagAttribute), true)
                                 .FirstOrDefault() is YamlTagAttribute att
                        ? att.TagName
                        : null;

                    builder = builder.WithTagMapping($"!{tagKey}", type);
                }

                builder = builder
                          .WithTypeConverter(
                    new FileTypeConverter(RegisteredTags, filePath),
                    s => s.OnTop());
            }

            // _desrializer = builder.Build();
            // return _desrializer;
            return(builder.Build());
        }
Exemplo n.º 5
0
        public void RoundtripWithYamlTypeConverter()
        {
            var obj = new MissingDefaultCtor("Yo");

            SerializerBuilder
            .EnsureRoundtrip()
            .WithTypeConverter(new MissingDefaultCtorConverter());

            DeserializerBuilder
            .WithTypeConverter(new MissingDefaultCtorConverter());

            var result = DoRoundtripFromObjectTo <MissingDefaultCtor>(obj, Serializer, Deserializer);

            result.Value.Should().Be("Yo");
        }
        public static T Deserialize <T>(TextReader reader, bool ignoreUnmatchedProperties = true, IYamlTypeConverter converter = null)
        {
            DeserializerBuilder builder = new DeserializerBuilder();

            if (ignoreUnmatchedProperties)
            {
                builder.IgnoreUnmatchedProperties();
            }

            if (converter != null)
            {
                builder.WithTypeConverter(converter);
            }

            Deserializer deserializer = builder.Build() as Deserializer;

            return(deserializer.Deserialize <T>(reader));
        }
        /// <summary>
        /// Deserializes a transformation object from the given file. The file is assumed to exist and be valid.
        /// </summary>
        /// <param name="file">The file.</param>
        /// <typeparam name="T">The transformation object type.</typeparam>
        /// <returns>The object.</returns>
        protected T Deserialize <T>(string file)
        {
            using var sr = new StreamReader(File.OpenRead(file));
            var deserB = new DeserializerBuilder()
                         .WithTypeConverter(new ColourYamlConverter())
                         .WithNodeDeserializer(i => new ValidatingNodeDeserializer(i), s => s.InsteadOf <ObjectNodeDeserializer>())
                         .WithNamingConvention(UnderscoredNamingConvention.Instance);

            if (typeof(T) != typeof(Species))
            {
                deserB = deserB.WithTypeConverter(new RawSpeciesYamlConverter());
            }

            var deser = deserB.Build();

            var content = sr.ReadToEnd();

            return(deser.Deserialize <T>(content));
        }
Exemplo n.º 8
0
        internal static ConfigurationStore CreateConfigurationStore([NotNull] string entryFilePath, [NotNull] BasePluginManager pluginManager)
        {
            var typeConverterFactories = pluginManager.GetPluginsOfType <IConfigTypeConverterFactory>();

            var deserializerBuilder = new DeserializerBuilder()
                                      .IgnoreUnmatchedProperties()
                                      .WithNamingConvention(new UnderscoredNamingConvention());

            // External converters
            foreach (var factory in typeConverterFactories)
            {
                var converter = factory.CreateTypeConverter();
                deserializerBuilder.WithTypeConverter(converter);
            }

            var deserializer = deserializerBuilder.Build();

            return(ConfigurationStore.Load(entryFilePath, deserializer));
        }
Exemplo n.º 9
0
        public static T Deserialize <T>(string yaml, bool ignoreUnmatchedProperties = true, IYamlTypeConverter converter = null)
        {
            using (StringReader reader = new StringReader(yaml))
            {
                DeserializerBuilder builder = new DeserializerBuilder();

                if (ignoreUnmatchedProperties)
                {
                    builder.IgnoreUnmatchedProperties();
                }

                if (converter != null)
                {
                    builder.WithTypeConverter(converter);
                }

                Deserializer deserializer = builder.Build();
                return(deserializer.Deserialize <T>(reader));
            }
        }
Exemplo n.º 10
0
        internal static ConfigurationStore CreateConfigurationStore([NotNull] BasePluginManager pluginManager)
        {
            var typeConverterFactories = pluginManager.GetPluginsOfType <IConfigTypeConverterFactory>();

            var deserializerBuilder = new DeserializerBuilder()
                                      .WithTypeInspector(inspector => new DataContractTypeInspector(inspector)
            {
                NamingConvention        = new UnderscoredNamingConvention(),
                DataMemberSerialization = DataMemberSerialization.OptIn
            })
                                      .IgnoreUnmatchedProperties();

            // External converters
            foreach (var factory in typeConverterFactories)
            {
                var converter = factory.CreateTypeConverter();
                deserializerBuilder.WithTypeConverter(converter);
            }

            var deserializer = deserializerBuilder.Build();

            return(TheaterDaysConfigurationStore.Load(ConfigurationEntryFile, deserializer));
        }
        public static T DeserializeFile <T>(string path, bool ignoreUnmatchedProperties = true, IYamlTypeConverter converter = null) where T : class
        {
            T ssc = null;

            using (StreamReader reader = new StreamReader(path))
            {
                DeserializerBuilder builder = new DeserializerBuilder();

                if (ignoreUnmatchedProperties)
                {
                    builder.IgnoreUnmatchedProperties();
                }

                if (converter != null)
                {
                    builder.WithTypeConverter(converter);
                }

                Deserializer deserializer = builder.Build() as Deserializer;
                ssc = deserializer.Deserialize <T>(reader);
            }
            return(ssc);
        }
Exemplo n.º 12
0
        internal static T Read <T>(string yamlFileName, params IYamlTypeConverter[] converters)
        {
            T   locale;
            var executingAssembly = Assembly.GetExecutingAssembly();

            using (var resourceStream = executingAssembly.GetManifestResourceStream(yamlFileName))
            {
                using (var textReader = new StreamReader(resourceStream))
                {
                    DeserializerBuilder deserializerBuilder = new DeserializerBuilder();
                    foreach (var converter in converters)
                    {
                        deserializerBuilder = deserializerBuilder.WithTypeConverter(converter);
                    }
                    var deserializer = deserializerBuilder
                                       .WithNamingConvention(CamelCaseNamingConvention.Instance)
                                       .Build()
                    ;
                    locale = deserializer.Deserialize <T>(textReader.ReadToEnd());
                }
            }
            return(locale);
        }
Exemplo n.º 13
0
        private PipelineFile <TObject> LoadFile <TObject, TConverter>(String path, IDictionary <String, Object> mustacheContext, CancellationToken cancellationToken, ref Int32 fileCount)
            where TConverter : IYamlTypeConverter, new()
        {
            fileCount++;
            if (m_options.MaxFiles > 0 && fileCount > m_options.MaxFiles)
            {
                throw new FormatException(TaskResources.YamlFileCount(m_options.MaxFiles));
            }

            cancellationToken.ThrowIfCancellationRequested();
            FileData                file = m_fileProvider.GetFile(path);
            String                  mustacheReplaced;
            StringReader            reader = null;
            CancellationTokenSource mustacheCancellationTokenSource = null;

            try
            {
                // Read front-matter
                IDictionary <String, Object> frontMatter = null;
                reader = new StringReader(file.Content);
                String line = reader.ReadLine();
                if (!String.Equals(line, "---", StringComparison.Ordinal))
                {
                    // No front-matter. Reset the reader.
                    reader.Dispose();
                    reader = new StringReader(file.Content);
                }
                else
                {
                    // Deseralize front-matter.
                    cancellationToken.ThrowIfCancellationRequested();
                    StringBuilder frontMatterBuilder = new StringBuilder();
                    while (true)
                    {
                        line = reader.ReadLine();
                        if (line == null)
                        {
                            throw new FormatException(TaskResources.YamlFrontMatterNotClosed(path));
                        }
                        else if (String.Equals(line, "---", StringComparison.Ordinal))
                        {
                            break;
                        }
                        else
                        {
                            frontMatterBuilder.AppendLine(line);
                        }
                    }

                    var frontMatterDeserializer = new Deserializer();
                    try
                    {
                        frontMatter = frontMatterDeserializer.Deserialize <IDictionary <String, Object> >(frontMatterBuilder.ToString());
                    }
                    catch (Exception ex)
                    {
                        throw new FormatException(TaskResources.YamlFrontMatterNotValid(path, ex.Message), ex);
                    }
                }

                // Merge the mustache replace context.
                frontMatter = frontMatter ?? new Dictionary <String, Object>();
                if (mustacheContext != null)
                {
                    foreach (KeyValuePair <String, Object> pair in mustacheContext)
                    {
                        frontMatter[pair.Key] = pair.Value;
                    }
                }

                // Prepare the mustache options.
                mustacheCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
                // var mustacheOptions = new MustacheEvaluationOptions
                // {
                //     CancellationToken = mustacheCancellationTokenSource.Token,
                //     EncodeMethod = MustacheEncodeMethods.JsonEncode,
                //     MaxResultLength = m_options.MustacheEvaluationMaxResultLength,
                // };

                // Parse the mustache template.
                cancellationToken.ThrowIfCancellationRequested();
                var mustacheParser = new MustacheTemplateParser(useDefaultHandlebarHelpers: true, useCommonTemplateHelpers: true);
                MustacheExpression mustacheExpression = mustacheParser.Parse(template: reader.ReadToEnd());

                // Limit the mustache evaluation time.
                if (m_options.MustacheEvaluationTimeout > TimeSpan.Zero)
                {
                    mustacheCancellationTokenSource.CancelAfter(m_options.MustacheEvaluationTimeout);
                }

                try
                {
                    // Perform the mustache evaluation.
                    mustacheReplaced = mustacheExpression.Evaluate(
                        replacementObject: frontMatter,
                        additionalEvaluationData: null,
                        parentContext: null,
                        partialExpressions: null
                        //options: mustacheOptions
                        );
                }
                catch (System.OperationCanceledException ex) when(mustacheCancellationTokenSource.IsCancellationRequested && !cancellationToken.IsCancellationRequested)
                {
                    throw new System.OperationCanceledException(TaskResources.MustacheEvaluationTimeout(path, m_options.MustacheEvaluationTimeout.TotalSeconds), ex);
                }

                m_trace.Verbose("{0}", new TraceFileContent($"{file.Name} after mustache replacement", mustacheReplaced));
            }
            finally
            {
                reader?.Dispose();
                reader = null;
                mustacheCancellationTokenSource?.Dispose();
                mustacheCancellationTokenSource = null;
            }

            // Deserialize
            DeserializerBuilder deserializerBuilder = new DeserializerBuilder();

            deserializerBuilder.WithTypeConverter(new TConverter());
            Deserializer deserializer = deserializerBuilder.Build();
            TObject      obj          = deserializer.Deserialize <TObject>(mustacheReplaced);

            m_trace.Verbose("{0}", new TraceObject <TObject, TConverter>($"{file.Name} after deserialization ", obj));
            var result = new PipelineFile <TObject> {
                Name = file.Name, Directory = file.Directory, Object = obj
            };

            return(result);
        }