Skip to content

Commit 19856cd

Browse files
feat: add TOML v1.0 serialization writer
Adds OpenApiTomlWriter (mirrors OpenApiJsonWriter / OpenApiYamlWriter), a new OpenApiConstants.Toml constant, and SerializeAsTomlAsync extension methods so callers can export an OpenAPI document as TOML. Public API declared in PublicAPI.Unshipped.txt; RS0026 suppressed for consistency with existing SerializeAsJson/YamlAsync overloads.
1 parent 101979e commit 19856cd

6 files changed

Lines changed: 918 additions & 0 deletions

File tree

src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,20 @@ public static Task SerializeAsYamlAsync<T>(this T element, Stream stream, OpenAp
4141
return element.SerializeAsync(stream, specVersion, OpenApiConstants.Yaml, cancellationToken);
4242
}
4343

44+
/// <summary>
45+
/// Serializes the <see cref="IOpenApiSerializable"/> to the Open API document (TOML) using the given stream and specification version.
46+
/// </summary>
47+
/// <typeparam name="T">the <see cref="IOpenApiSerializable"/></typeparam>
48+
/// <param name="element">The Open API element.</param>
49+
/// <param name="stream">The output stream.</param>
50+
/// <param name="specVersion">The Open API specification version.</param>
51+
/// <param name="cancellationToken">The cancellation token.</param>
52+
public static Task SerializeAsTomlAsync<T>(this T element, Stream stream, OpenApiSpecVersion specVersion, CancellationToken cancellationToken = default)
53+
where T : IOpenApiSerializable
54+
{
55+
return element.SerializeAsync(stream, specVersion, OpenApiConstants.Toml, cancellationToken);
56+
}
57+
4458
/// <summary>
4559
/// Serializes the <see cref="IOpenApiSerializable"/> to the Open API document using
4660
/// the given stream, specification version and the format.
@@ -91,6 +105,7 @@ public static Task SerializeAsync<T>(
91105
OpenApiConstants.Json when settings is OpenApiJsonWriterSettings jsonSettings => new OpenApiJsonWriter(streamWriter, jsonSettings),
92106
OpenApiConstants.Json => new OpenApiJsonWriter(streamWriter, settings),
93107
OpenApiConstants.Yaml => new OpenApiYamlWriter(streamWriter, settings),
108+
OpenApiConstants.Toml => new OpenApiTomlWriter(streamWriter, settings),
94109
_ => throw new OpenApiException(string.Format(SRResource.OpenApiFormatNotSupported, format)),
95110
};
96111
return element.SerializeAsync(writer, specVersion, cancellationToken);
@@ -167,6 +182,22 @@ public static Task<string> SerializeAsYamlAsync<T>(
167182
return element.SerializeAsync(specVersion, OpenApiConstants.Yaml, cancellationToken);
168183
}
169184

185+
/// <summary>
186+
/// Serializes the <see cref="IOpenApiSerializable"/> to the Open API document as a string in TOML format.
187+
/// </summary>
188+
/// <typeparam name="T">the <see cref="IOpenApiSerializable"/></typeparam>
189+
/// <param name="element">The Open API element.</param>
190+
/// <param name="specVersion">The Open API specification version.</param>
191+
/// <param name="cancellationToken">The cancellation token.</param>
192+
public static Task<string> SerializeAsTomlAsync<T>(
193+
this T element,
194+
OpenApiSpecVersion specVersion,
195+
CancellationToken cancellationToken = default)
196+
where T : IOpenApiSerializable
197+
{
198+
return element.SerializeAsync(specVersion, OpenApiConstants.Toml, cancellationToken);
199+
}
200+
170201
/// <summary>
171202
/// Serializes the <see cref="IOpenApiSerializable"/> to the Open API document as a string in the given format.
172203
/// </summary>

src/Microsoft.OpenApi/GlobalSuppressions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@
66
using System.Diagnostics.CodeAnalysis;
77

88
[assembly: SuppressMessage("Style", "IDE0130:Namespace does not match folder structure", Justification = "<Pending>", Scope = "namespace", Target = "~N:Microsoft.OpenApi")]
9+
[assembly: SuppressMessage("ApiDesign", "RS0026:Do not add multiple overloads with optional parameters", Justification = "Consistent with existing SerializeAsJsonAsync and SerializeAsYamlAsync overloads.", Scope = "member", Target = "~M:Microsoft.OpenApi.OpenApiSerializableExtensions.SerializeAsTomlAsync``1(``0,System.IO.Stream,Microsoft.OpenApi.OpenApiSpecVersion,System.Threading.CancellationToken)~System.Threading.Tasks.Task")]
10+
[assembly: SuppressMessage("ApiDesign", "RS0026:Do not add multiple overloads with optional parameters", Justification = "Consistent with existing SerializeAsJsonAsync and SerializeAsYamlAsync overloads.", Scope = "member", Target = "~M:Microsoft.OpenApi.OpenApiSerializableExtensions.SerializeAsTomlAsync``1(``0,Microsoft.OpenApi.OpenApiSpecVersion,System.Threading.CancellationToken)~System.Threading.Tasks.Task{System.String}")]

src/Microsoft.OpenApi/Models/OpenApiConstants.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ public static class OpenApiConstants
3030
/// </summary>
3131
public const string Yml = "yml";
3232

33+
/// <summary>
34+
/// Field: Toml
35+
/// </summary>
36+
public const string Toml = "toml";
37+
3338
/// <summary>
3439
/// Field: Info
3540
/// </summary>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,26 @@
11
#nullable enable
2+
const Microsoft.OpenApi.OpenApiConstants.Toml = "toml" -> string!
3+
Microsoft.OpenApi.OpenApiTomlWriter
4+
Microsoft.OpenApi.OpenApiTomlWriter.OpenApiTomlWriter(System.IO.TextWriter! textWriter) -> void
5+
Microsoft.OpenApi.OpenApiTomlWriter.OpenApiTomlWriter(System.IO.TextWriter! textWriter, Microsoft.OpenApi.OpenApiWriterSettings? settings) -> void
6+
override Microsoft.OpenApi.OpenApiTomlWriter.BaseIndentation.get -> int
7+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteEndArray() -> void
8+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteEndObject() -> void
9+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteNull() -> void
10+
override Microsoft.OpenApi.OpenApiTomlWriter.WritePropertyName(string! name) -> void
11+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteRaw(string! value) -> void
12+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteStartArray() -> void
13+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteStartObject() -> void
14+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteValue(bool value) -> void
15+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteValue(decimal value) -> void
16+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteValue(double value) -> void
17+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteValue(float value) -> void
18+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteValue(int value) -> void
19+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteValue(long value) -> void
20+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteValue(object? value) -> void
21+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteValue(string! value) -> void
22+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteValue(System.DateTime value) -> void
23+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteValue(System.DateTimeOffset value) -> void
24+
override Microsoft.OpenApi.OpenApiTomlWriter.WriteValueSeparator() -> void
25+
static Microsoft.OpenApi.OpenApiSerializableExtensions.SerializeAsTomlAsync<T>(this T element, Microsoft.OpenApi.OpenApiSpecVersion specVersion, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<string!>!
26+
static Microsoft.OpenApi.OpenApiSerializableExtensions.SerializeAsTomlAsync<T>(this T element, System.IO.Stream! stream, Microsoft.OpenApi.OpenApiSpecVersion specVersion, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!

0 commit comments

Comments
 (0)