|
14 | 14 |
|
15 | 15 | namespace BenchmarkSuite |
16 | 16 | { |
| 17 | + [GenerateToonTabularArrayConverter] |
17 | 18 | public record Person(int Id, string Name, int Age); |
18 | 19 |
|
19 | 20 | [Orderer(SummaryOrderPolicy.FastestToSlowest)] |
@@ -45,7 +46,7 @@ public string ToonEncoder_EncodeAsTabularArray() |
45 | 46 | [Benchmark] |
46 | 47 | public string ToonEncoder_EncodeAsTabularArray_SourceGenerated() |
47 | 48 | { |
48 | | - return PersonToonTabularArrayConverter.EncodeAsTabularArray(data); |
| 49 | + return Cysharp.AI.Converters.BenchmarkSuite_PersonTabularArrayConverter.EncodeAsTabularArray(data); |
49 | 50 | } |
50 | 51 |
|
51 | 52 | // https://github.com/StefH/Toon.NET |
@@ -83,88 +84,4 @@ public string ToonOfficial_Encode() |
83 | 84 | return global::Toon.Format.ToonEncoder.Encode(data); |
84 | 85 | } |
85 | 86 | } |
86 | | - |
87 | | - // TODO: test generation, finally need to remove. |
88 | | - public class PersonToonTabularArrayConverter : System.Text.Json.Serialization.JsonConverter<Person[]> |
89 | | - { |
90 | | - static readonly ReadOnlyMemory<byte>[] utf8FieldNames = ["Id"u8.ToArray(), "Name"u8.ToArray(), "Age"u8.ToArray()]; |
91 | | - |
92 | | - public static string EncodeAsTabularArray(Person[] value) |
93 | | - { |
94 | | - var bufferWriter = new Cysharp.AI.Internal.ValueArrayPoolBufferWriter<byte>(); |
95 | | - try |
96 | | - { |
97 | | - EncodeAsTabularArray(ref bufferWriter, value); |
98 | | - return Encoding.UTF8.GetString(bufferWriter.WrittenSpan); |
99 | | - } |
100 | | - finally |
101 | | - { |
102 | | - bufferWriter.Dispose(); |
103 | | - } |
104 | | - } |
105 | | - |
106 | | - public static byte[] EncodeAsTabularArrayToUtf8Bytes(Person[] value) |
107 | | - { |
108 | | - var bufferWriter = new ValueArrayPoolBufferWriter<byte>(); |
109 | | - try |
110 | | - { |
111 | | - EncodeAsTabularArray(ref bufferWriter, value); |
112 | | - return bufferWriter.WrittenSpan.ToArray(); |
113 | | - } |
114 | | - finally |
115 | | - { |
116 | | - bufferWriter.Dispose(); |
117 | | - } |
118 | | - } |
119 | | - |
120 | | - public static async ValueTask EncodeAsTabularArrayAsync(Stream utf8Stream, Person[] value, CancellationToken cancellationToken = default) |
121 | | - { |
122 | | - var writer = PipeWriter.Create(utf8Stream); |
123 | | - EncodeAsTabularArray(ref writer, value); |
124 | | - await writer.FlushAsync(cancellationToken); |
125 | | - } |
126 | | - |
127 | | - public static void EncodeAsTabularArray<TBufferWriter>(ref TBufferWriter bufferWriter, Person[] value) |
128 | | - where TBufferWriter : IBufferWriter<byte> |
129 | | - { |
130 | | - var toonWriter = ToonWriter.Create(ref bufferWriter); |
131 | | - EncodeAsTabularArray(ref toonWriter, value); |
132 | | - toonWriter.Flush(); |
133 | | - } |
134 | | - |
135 | | - public static void EncodeAsTabularArray<TBufferWriter>(ref ToonWriter<TBufferWriter> toonWriter, Person[] value) |
136 | | - where TBufferWriter : IBufferWriter<byte> |
137 | | - { |
138 | | - toonWriter.WriteStartTabularArray(value.Length, utf8FieldNames, escaped: true); |
139 | | - |
140 | | - foreach (var item in value) |
141 | | - { |
142 | | - toonWriter.WriteNextRowOfTabularArray(); |
143 | | - toonWriter.WriteNumber(item.Id); |
144 | | - toonWriter.WriteString(item.Name); |
145 | | - toonWriter.WriteNumber(item.Age); |
146 | | - } |
147 | | - |
148 | | - toonWriter.WriteEndTabularArray(); |
149 | | - } |
150 | | - |
151 | | - public override void Write(Utf8JsonWriter utf8JsonWriter, Person[] value, JsonSerializerOptions options) |
152 | | - { |
153 | | - var bufferWriter = new Cysharp.AI.Internal.ValueArrayPoolBufferWriter<byte>(); |
154 | | - try |
155 | | - { |
156 | | - EncodeAsTabularArray(ref bufferWriter, value); |
157 | | - utf8JsonWriter.WriteStringValue(bufferWriter.WrittenSpan); |
158 | | - } |
159 | | - finally |
160 | | - { |
161 | | - bufferWriter.Dispose(); |
162 | | - } |
163 | | - } |
164 | | - |
165 | | - public override Person[]? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) |
166 | | - { |
167 | | - throw new NotSupportedException("Toon serialization only supports Write."); |
168 | | - } |
169 | | - } |
170 | 87 | } |
0 commit comments