Exemple #1
0
        private DocFile ProcessSerialization(DocSerialization ser, DocAssembly assembly)
        {
            var result = new DocFile(ser.FileName);

            result.AddThenBlankLine(writer.WriteHeading1($"{ser.Name} Reference"));
            result.AddThenBlankLine(ParserUtils.ProcessBreadcrumb(assembly));
            var table = new MarkdownTable("ExpressionType", "Serializer");

            foreach (ExpressionType expressionType in Enum.GetValues(typeof(ExpressionType)))
            {
                var name = expressionType.ToString();
                if (ser.Serializers.ContainsKey(expressionType))
                {
                    var entry = ser.Serializers[expressionType];
                    table.AddRow(name, writer.WriteLink(entry.Name.NameOnly(), entry.FileName));
                }
                else
                {
                    table.AddRow(name, "_Not Supported_");
                }
            }

            writer.AddRange(result.Markdown, table.CloseTable());
            return(result);
        }
        /// <summary>
        /// Builds the serializer cross-reference.
        /// </summary>
        /// <param name="doc">The <see cref="DocAssembly"/> for serializers.</param>
        private void IterateSerializers(DocAssembly doc)
        {
            if (doc.CustomDocs.OfType <DocSerialization>().Any())
            {
                return;
            }

            var serializerDoc = new DocSerialization
            {
                Name = typeof(ExpressionSerializerAttribute).Namespace,
            };

            var types = Assembly.GetTypes()
                        .Where(t => t.Namespace == typeof(BaseSerializer <,>).Namespace &&
                               t.GetCustomAttributes(false)
                               .Any(c => c is ExpressionSerializerAttribute))
                        .SelectMany(t => t.GetCustomAttributes(false).OfType <ExpressionSerializerAttribute>()
                                    .Select(c => new { serializer = t, type = c.Type }));

            foreach (var serializer in types)
            {
                var name    = serializer.serializer.FullName;
                var typeDoc = ParserUtils.GetTypeQuery(doc).Where(d => d.Name == name).Single();
                serializerDoc.Serializers.Add(serializer.type, typeDoc);
            }

            doc.CustomDocs.Add(serializerDoc);
        }