private HttpContent GetStringContent(ApiDocumentation vocab, string format, string docDir) { var sbMain = new StringBuilder(); sbMain.Heading(format, 1, "Vocab"); foreach (var clazz in vocab.SupportedClasses) { var sb = new StringBuilder(); sb.Heading(format, 1, clazz.Label); if (!string.IsNullOrWhiteSpace(clazz.UnstableNote)) { sb.Para(format, clazz.UnstableNote, true); } sb.Para(format, clazz.Description); sb.Code(format, clazz.UriTemplate); if (clazz.SupportedOperations != null && clazz.SupportedOperations.Length > 0) { sb.Heading(format, 2, "Supported operations"); // sb.Code(format, clazz.UriTemplate); AppendSupportedOperationsTable(sb, format, clazz.SupportedOperations); } if (clazz.SupportedProperties != null && clazz.SupportedProperties.Length > 0) { sb.Heading(format, 2, "Supported properties"); foreach (SupportedProperty prop in clazz.SupportedProperties) { var linkProp = prop.Property as HydraLinkProperty; if (linkProp != null) { sb.Heading(format, 3, prop.Title + " (🔗)"); } else { sb.Heading(format, 3, prop.Title); } sb.Para(format, prop.Description); if (!string.IsNullOrWhiteSpace(prop.UnstableNote)) { sb.Para(format, prop.UnstableNote, true); } sb.StartTable(format, "domain", "range", "readonly", "writeonly"); sb.TableRow(format, NameSpace(prop.Property.Domain), NameSpace(prop.Property.Range), prop.ReadOnly.ToString(), prop.WriteOnly.ToString()); sb.EndTable(format); if (linkProp != null) { sb.Code(format, clazz.UriTemplate + "/" + linkProp.Label); AppendSupportedOperationsTable(sb, format, linkProp.SupportedOperations); } } } string classDoc = sb.ToString(); WriteDocToDisk(format, docDir, clazz, classDoc); sbMain.Append(classDoc); } return new StringContent(sbMain.ToString(), Encoding.UTF8, "text/" + format); }
private void AppendSupportedOperationsTable(StringBuilder sb, string format, Operation[] supportedOperations) { if (supportedOperations != null && supportedOperations.Length > 0) { sb.StartTable(format, "Method", "Label", "Expects", "Returns", "Statuses"); foreach (var op in supportedOperations) { string statuses = ""; if (op.StatusCodes != null && op.StatusCodes.Length > 0) { statuses = string.Join(", ", op.StatusCodes.Select(code => code.StatusCode + " " + code.Description)); } sb.TableRow(format, op.Method, op.Label, NameSpace(op.Expects), NameSpace(op.Returns), statuses); } sb.EndTable(format); } }