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); }