/// <summary>
        /// Maps a specified <see cref="CodeSnippetElement"/> to the newly created <see cref="Snippet"/>.
        /// </summary>
        /// <param name="element">A <see cref="CodeSnippetElement"/> that contains deserialized snippet data.</param>
        /// <returns>Newly created <see cref="Snippet"/>.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="element"/> is <c>null</c>.</exception>
        public static Snippet MapFromElement(CodeSnippetElement element)
        {
            if (element == null)
            {
                throw new ArgumentNullException(nameof(element));
            }

            var snippet = new Snippet();

            if (element.Format != null &&
                Version.TryParse(element.Format, out Version version) &&
                ValidationHelper.IsValidVersion(version))
            {
                snippet.FormatVersion = version;
            }

            if (element.Header != null)
            {
                LoadHeaderElement(element.Header, snippet);
            }

            if (element.Snippet != null)
            {
                LoadSnippetElement(element.Snippet, snippet);
            }

            return(snippet);
        }
Exemple #2
0
        /// <summary>
        /// Returns enumerable collection of <see cref="Snippet"/> contained by a specified <see cref="Stream"/>.
        /// </summary>
        /// <param name="stream">The <see cref="Stream"/> that contains snippets to deserialize.</param>
        /// <returns>Enumerable collection of snippets being deserialized.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="stream"/> is <c>null</c>.</exception>
        public static IEnumerable <Snippet> Deserialize(Stream stream)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            return(Deserialize());

            IEnumerable <Snippet> Deserialize()
            {
                using (XmlReader xmlReader = XmlReader.Create(stream, XmlReaderSettings))
                {
                    while (xmlReader.Read() && xmlReader.NodeType != XmlNodeType.Element)
                    {
                    }

                    switch (xmlReader.Name)
                    {
                    case "CodeSnippet":
                    {
                        CodeSnippetElement element = Deserialize <CodeSnippetElement>(xmlReader, CodeSnippetElementXmlSerializer);

                        yield return(SnippetMapper.MapFromElement(element));

                        break;
                    }

                    case "CodeSnippets":
                    {
                        CodeSnippetsElement element = Deserialize <CodeSnippetsElement>(xmlReader, CodeSnippetsElementXmlSerializer);

                        if (element.Snippets == null)
                        {
                            break;
                        }

                        for (int i = 0; i < element.Snippets.Length; i++)
                        {
                            yield return(SnippetMapper.MapFromElement(element.Snippets[i]));
                        }

                        break;
                    }
                    }
                }
            }
        }
Exemple #3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SerializationContext"/> class with a specified code snippet and and settings.
 /// </summary>
 /// <param name="snippet">A <see cref="Snippet"/> instance to serialize.</param>
 /// <param name="settings">A <see cref="SaveSettings"/> that enables to modify code snippet serialization process.</param>
 public SerializationContext(Snippet snippet, SaveSettings settings)
 {
     Snippet  = snippet;
     Settings = settings;
     Element  = new CodeSnippetElement();
 }