Skip to content

Commit 4a97e2f

Browse files
committed
done Source Generator(except validation)
1 parent 6adcc10 commit 4a97e2f

File tree

5 files changed

+303
-186
lines changed

5 files changed

+303
-186
lines changed

sandbox/BenchmarkSuite/BenchmarkSuite.csproj

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
<LangVersion>14</LangVersion>
66
<OutputType>Exe</OutputType>
77
<Nullable>enable</Nullable>
8-
8+
99
</PropertyGroup>
1010

1111
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
12-
<NoWarn>1701;1702;CS0436</NoWarn>
12+
<NoWarn>1701;1702;CS0436</NoWarn>
1313
</PropertyGroup>
1414

1515
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
16-
<NoWarn>1701;1702;CS0436</NoWarn>
16+
<NoWarn>1701;1702;CS0436</NoWarn>
1717
</PropertyGroup>
1818

1919
<ItemGroup>
@@ -27,5 +27,9 @@
2727

2828
<ItemGroup>
2929
<ProjectReference Include="..\..\src\ToonEncoder\ToonEncoder.csproj" />
30+
<ProjectReference Include="..\..\src\ToonEncoder.Generator\ToonEncoder.Generator.csproj">
31+
<OutputItemType>Analyzer</OutputItemType>
32+
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
33+
</ProjectReference>
3034
</ItemGroup>
3135
</Project>

sandbox/BenchmarkSuite/EncodeBenchmark.cs

Lines changed: 2 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
namespace BenchmarkSuite
1616
{
17+
[GenerateToonTabularArrayConverter]
1718
public record Person(int Id, string Name, int Age);
1819

1920
[Orderer(SummaryOrderPolicy.FastestToSlowest)]
@@ -45,7 +46,7 @@ public string ToonEncoder_EncodeAsTabularArray()
4546
[Benchmark]
4647
public string ToonEncoder_EncodeAsTabularArray_SourceGenerated()
4748
{
48-
return PersonToonTabularArrayConverter.EncodeAsTabularArray(data);
49+
return Cysharp.AI.Converters.BenchmarkSuite_PersonTabularArrayConverter.EncodeAsTabularArray(data);
4950
}
5051

5152
// https://github.com/StefH/Toon.NET
@@ -83,88 +84,4 @@ public string ToonOfficial_Encode()
8384
return global::Toon.Format.ToonEncoder.Encode(data);
8485
}
8586
}
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-
}
17087
}

sandbox/ConsoleApp1/Program.cs

Lines changed: 2 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
DefaultIgnoreCondition = JsonIgnoreCondition.Never,
1818
Converters =
1919
{
20-
new ToonTabularArrayConverter<Person[]>(),
20+
// new ToonTabularArrayConverter<Person[]>(),
21+
new Cysharp.AI.Converters.PersonTabularArrayConverter(),
2122
},
2223
};
2324

@@ -39,92 +40,7 @@
3940
var hoge = JsonSerializer.Deserialize<string>(foo);
4041
Console.WriteLine(hoge);
4142

42-
43-
4443
[Cysharp.AI.GenerateToonTabularArrayConverter]
4544
public record Person(int Id, string Name, int Age);
4645

4746

48-
49-
public class PersonToonTabularArrayConverter : System.Text.Json.Serialization.JsonConverter<Person[]>
50-
{
51-
static readonly ReadOnlyMemory<byte>[] utf8FieldNames = ["Id"u8.ToArray(), "Name"u8.ToArray(), "Age"u8.ToArray()];
52-
53-
public static string EncodeAsTabularArray(Person[] value)
54-
{
55-
var bufferWriter = new Cysharp.AI.Internal.ValueArrayPoolBufferWriter<byte>();
56-
try
57-
{
58-
EncodeAsTabularArray(ref bufferWriter, value);
59-
return Encoding.UTF8.GetString(bufferWriter.WrittenSpan);
60-
}
61-
finally
62-
{
63-
bufferWriter.Dispose();
64-
}
65-
}
66-
67-
public static byte[] EncodeAsTabularArrayToUtf8Bytes(Person[] value)
68-
{
69-
var bufferWriter = new ValueArrayPoolBufferWriter<byte>();
70-
try
71-
{
72-
EncodeAsTabularArray(ref bufferWriter, value);
73-
return bufferWriter.WrittenSpan.ToArray();
74-
}
75-
finally
76-
{
77-
bufferWriter.Dispose();
78-
}
79-
}
80-
81-
public static async ValueTask EncodeAsTabularArrayAsync(Stream utf8Stream, Person[] value, CancellationToken cancellationToken = default)
82-
{
83-
var writer = PipeWriter.Create(utf8Stream);
84-
EncodeAsTabularArray(ref writer, value);
85-
await writer.FlushAsync(cancellationToken);
86-
}
87-
88-
public static void EncodeAsTabularArray<TBufferWriter>(ref TBufferWriter bufferWriter, Person[] value)
89-
where TBufferWriter : IBufferWriter<byte>
90-
{
91-
var toonWriter = ToonWriter.Create(ref bufferWriter);
92-
EncodeAsTabularArray(ref toonWriter, value);
93-
toonWriter.Flush();
94-
}
95-
96-
public static void EncodeAsTabularArray<TBufferWriter>(ref ToonWriter<TBufferWriter> toonWriter, Person[] value)
97-
where TBufferWriter : IBufferWriter<byte>
98-
{
99-
toonWriter.WriteStartTabularArray(value.Length, utf8FieldNames, escaped: true);
100-
101-
foreach (var item in value)
102-
{
103-
toonWriter.WriteNextRowOfTabularArray();
104-
toonWriter.WriteNumber(item.Id);
105-
toonWriter.WriteString(item.Name);
106-
toonWriter.WriteNumber(item.Age);
107-
}
108-
109-
toonWriter.WriteEndTabularArray();
110-
}
111-
112-
public override void Write(Utf8JsonWriter utf8JsonWriter, Person[] value, JsonSerializerOptions options)
113-
{
114-
var bufferWriter = new Cysharp.AI.Internal.ValueArrayPoolBufferWriter<byte>();
115-
try
116-
{
117-
EncodeAsTabularArray(ref bufferWriter, value);
118-
utf8JsonWriter.WriteStringValue(bufferWriter.WrittenSpan);
119-
}
120-
finally
121-
{
122-
bufferWriter.Dispose();
123-
}
124-
}
125-
126-
public override Person[]? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
127-
{
128-
throw new NotSupportedException("Toon serialization only supports Write.");
129-
}
130-
}

0 commit comments

Comments
 (0)