Skip to content

Commit 6604300

Browse files
authored
feat: Bring in Serde v0.8.0-preview5 (#192)
1 parent 8a308a9 commit 6604300

19 files changed

+118
-126
lines changed

Directory.Packages.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
44
</PropertyGroup>
55
<ItemGroup>
6-
<PackageVersion Include="Serde" Version="0.8.0-preview4" />
6+
<PackageVersion Include="Serde" Version="[0.8.0-preview5]" />
77
<PackageVersion Include="Spectre.Console" Version="0.49.1" />
88
<PackageVersion Include="Spectre.Console.Testing" Version="0.46.0" />
99
<PackageVersion Include="StaticCs" Version="0.3.1" />

src/Serde.CmdLine/CmdLine.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public static Result<T, IReadOnlyList<ISerdeInfo>> ParseRaw<T>(
2020
var deserializer = new Deserializer(args, handleHelp);
2121
try
2222
{
23-
var cmd = T.DeserializeInstance.Deserialize(deserializer);
23+
var cmd = T.Instance.Deserialize(deserializer);
2424
if (handleHelp && deserializer.HelpInfos.Count > 0)
2525
{
2626
return new Result<T, IReadOnlyList<ISerdeInfo>>.Err(deserializer.HelpInfos);
@@ -59,7 +59,7 @@ public static bool TryParse<T>(string[] args, IAnsiConsole console, out T cmd)
5959
cmd = value;
6060
return true;
6161
case Result<T, IReadOnlyList<ISerdeInfo>>.Err(var helpInfos):
62-
var rootInfo = SerdeInfoProvider.GetInfo<T>();
62+
var rootInfo = SerdeInfoProvider.GetDeserializeInfo<T>();
6363
var lastInfo = helpInfos.Last();
6464
console.WriteLine(CmdLine.GetHelpText(rootInfo, lastInfo, includeHelp: true));
6565
cmd = default!;
@@ -71,7 +71,7 @@ public static bool TryParse<T>(string[] args, IAnsiConsole console, out T cmd)
7171
catch (ArgumentSyntaxException ex)
7272
{
7373
console.WriteLine("error: " + ex.Message);
74-
var rootInfo = SerdeInfoProvider.GetInfo<T>();
74+
var rootInfo = SerdeInfoProvider.GetDeserializeInfo<T>();
7575
console.WriteLine(GetHelpText(rootInfo));
7676
cmd = default!;
7777
return false;
Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,38 @@
11
namespace Serde.CmdLine;
22

3-
internal sealed partial class Deserializer : IDeserializeType
3+
internal sealed partial class Deserializer : ITypeDeserializer
44
{
5-
V IDeserializeType.ReadValue<V, D>(int index, D deserialize) => deserialize.Deserialize(this);
5+
int? ITypeDeserializer.SizeOpt => null;
66

7-
bool IDeserializeType.ReadBool(int index) => ReadBool();
7+
T ITypeDeserializer.ReadValue<T>(ISerdeInfo info, int index, IDeserialize<T> deserialize) => deserialize.Deserialize(this);
88

9-
byte IDeserializeType.ReadByte(int index) => ReadByte();
9+
bool ITypeDeserializer.ReadBool(ISerdeInfo info, int index) => ReadBool();
1010

11-
char IDeserializeType.ReadChar(int index) => ReadChar();
11+
byte ITypeDeserializer.ReadU8(ISerdeInfo info, int index) => ReadU8();
1212

13-
decimal IDeserializeType.ReadDecimal(int index) => ReadDecimal();
13+
char ITypeDeserializer.ReadChar(ISerdeInfo info, int index) => ReadChar();
1414

15-
double IDeserializeType.ReadDouble(int index) => ReadDouble();
15+
decimal ITypeDeserializer.ReadDecimal(ISerdeInfo info, int index) => ReadDecimal();
1616

17-
float IDeserializeType.ReadFloat(int index) => ReadFloat();
17+
double ITypeDeserializer.ReadF64(ISerdeInfo info, int index) => ReadF64();
1818

19-
short IDeserializeType.ReadI16(int index) => ReadI16();
19+
float ITypeDeserializer.ReadF32(ISerdeInfo info, int index) => ReadF32();
2020

21-
int IDeserializeType.ReadI32(int index) => ReadI32();
21+
short ITypeDeserializer.ReadI16(ISerdeInfo info, int index) => ReadI16();
2222

23-
long IDeserializeType.ReadI64(int index) => ReadI64();
23+
int ITypeDeserializer.ReadI32(ISerdeInfo info, int index) => ReadI32();
2424

25-
sbyte IDeserializeType.ReadSByte(int index) => ReadSByte();
25+
long ITypeDeserializer.ReadI64(ISerdeInfo info, int index) => ReadI64();
2626

27-
string IDeserializeType.ReadString(int index) => ReadString();
27+
sbyte ITypeDeserializer.ReadI8(ISerdeInfo info, int index) => ReadI8();
2828

29-
ushort IDeserializeType.ReadU16(int index) => ReadU16();
29+
string ITypeDeserializer.ReadString(ISerdeInfo info, int index) => ReadString();
3030

31-
uint IDeserializeType.ReadU32(int index) => ReadU32();
31+
ushort ITypeDeserializer.ReadU16(ISerdeInfo info, int index) => ReadU16();
3232

33-
ulong IDeserializeType.ReadU64(int index) => ReadU64();
33+
uint ITypeDeserializer.ReadU32(ISerdeInfo info, int index) => ReadU32();
3434

35-
void IDeserializeType.SkipValue() => _argIndex++;
35+
ulong ITypeDeserializer.ReadU64(ISerdeInfo info, int index) => ReadU64();
36+
37+
void ITypeDeserializer.SkipValue(ISerdeInfo info, int index) => _argIndex++;
3638
}

src/Serde.CmdLine/Deserializer.cs

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ internal sealed partial class Deserializer(string[] args, bool handleHelp) : IDe
1313

1414
public IReadOnlyList<ISerdeInfo> HelpInfos => _helpInfos;
1515

16-
int IDeserializeType.TryReadIndex(ISerdeInfo serdeInfo, out string? errorName)
16+
int ITypeDeserializer.TryReadIndex(ISerdeInfo serdeInfo, out string? errorName)
1717
{
1818
if (_argIndex == args.Length)
1919
{
2020
errorName = null;
21-
return IDeserializeType.EndOfType;
21+
return ITypeDeserializer.EndOfType;
2222
}
2323

2424
var arg = args[_argIndex];
@@ -29,7 +29,7 @@ int IDeserializeType.TryReadIndex(ISerdeInfo serdeInfo, out string? errorName)
2929
if (_argIndex == args.Length)
3030
{
3131
errorName = null;
32-
return IDeserializeType.EndOfType;
32+
return ITypeDeserializer.EndOfType;
3333
}
3434
arg = args[_argIndex];
3535
}
@@ -113,7 +113,7 @@ int IDeserializeType.TryReadIndex(ISerdeInfo serdeInfo, out string? errorName)
113113
else
114114
{
115115
errorName = arg;
116-
return IDeserializeType.IndexNotFound;
116+
return ITypeDeserializer.IndexNotFound;
117117
}
118118
}
119119

@@ -132,47 +132,39 @@ public bool ReadBool()
132132

133133
public string ReadString() => args[_argIndex++];
134134

135-
public T ReadNullableRef<T, D>(D d)
135+
public T ReadNullableRef<T>(IDeserialize<T> d)
136136
where T : class
137-
where D : IDeserialize<T>
138137
{
139138
// Treat all nullable values as just being optional. Since we got here we must have a value
140139
// in hand.
141140
return d.Deserialize(this);
142141
}
143142

144-
public T ReadAny<T>(IDeserializeVisitor<T> v) where T : class => throw new NotImplementedException();
145-
146143
public char ReadChar() => throw new NotImplementedException();
147144

148-
public byte ReadByte() => throw new NotImplementedException();
145+
public byte ReadU8() => throw new NotImplementedException();
149146

150147
public ushort ReadU16() => throw new NotImplementedException();
151148

152149
public uint ReadU32() => throw new NotImplementedException();
153150

154151
public ulong ReadU64() => throw new NotImplementedException();
155152

156-
public sbyte ReadSByte() => throw new NotImplementedException();
153+
public sbyte ReadI8() => throw new NotImplementedException();
157154

158155
public short ReadI16() => throw new NotImplementedException();
159156

160157
public int ReadI32() => throw new NotImplementedException();
161158

162159
public long ReadI64() => throw new NotImplementedException();
163160

164-
public float ReadFloat() => throw new NotImplementedException();
161+
public float ReadF32() => throw new NotImplementedException();
165162

166-
public double ReadDouble() => throw new NotImplementedException();
163+
public double ReadF64() => throw new NotImplementedException();
167164

168165
public decimal ReadDecimal() => throw new NotImplementedException();
169166

170-
public IDeserializeCollection ReadCollection(ISerdeInfo typeInfo)
171-
{
172-
throw new NotImplementedException();
173-
}
174-
175-
public IDeserializeType ReadType(ISerdeInfo typeInfo) => this;
167+
public ITypeDeserializer ReadType(ISerdeInfo typeInfo) => this;
176168

177169
public void Dispose() { }
178170
}

src/dnvm/Channel.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,20 @@ partial record Channel : ISerializeProvider<Channel>
6161
public sealed override string ToString() => GetDisplayName();
6262
public string GetLowerName() => GetDisplayName().ToLowerInvariant();
6363

64-
static ISerdeInfo ISerdeInfoProvider.SerdeInfo { get; } = SerdeInfo.MakePrimitive(nameof(Channel));
65-
static ISerialize<Channel> ISerializeProvider<Channel>.SerializeInstance => Serialize.Instance;
64+
static ISerialize<Channel> ISerializeProvider<Channel>.Instance => Serialize.Instance;
6665

6766
private sealed class Serialize : ISerialize<Channel>
6867
{
6968
public static readonly Serialize Instance = new();
7069
private Serialize() { }
7170

71+
/// <summary>
72+
/// Serialize as a string.
73+
/// </summary>
74+
ISerdeInfo ISerdeInfoProvider.SerdeInfo => StringProxy.SerdeInfo;
75+
7276
void ISerialize<Channel>.Serialize(Channel channel, ISerializer serializer)
73-
=> serializer.SerializeString(channel.GetLowerName());
77+
=> serializer.WriteString(channel.GetLowerName());
7478
}
7579

7680
partial record VersionedMajorMinor
@@ -101,7 +105,7 @@ partial record Preview : Channel
101105

102106
partial record Channel : IDeserializeProvider<Channel>
103107
{
104-
static IDeserialize<Channel> IDeserializeProvider<Channel>.DeserializeInstance => DeserializeProxy.Instance;
108+
static IDeserialize<Channel> IDeserializeProvider<Channel>.Instance => DeserializeProxy.Instance;
105109

106110
public static Channel FromString(string str)
107111
{
@@ -137,6 +141,12 @@ public static Channel FromString(string str)
137141
private sealed class DeserializeProxy : IDeserialize<Channel>
138142
{
139143
public static readonly DeserializeProxy Instance = new();
144+
145+
/// <summary>
146+
/// Deserialize as a string.
147+
/// </summary>
148+
ISerdeInfo ISerdeInfoProvider.SerdeInfo => StringProxy.SerdeInfo;
149+
140150
public Channel Deserialize(IDeserializer deserializer)
141151
=> FromString(StringProxy.Instance.Deserialize(deserializer));
142152
}

src/dnvm/CommandLineArguments.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public sealed partial record InstallCommand : DnvmSubCommand
4040
public bool? Force { get; init; } = null;
4141

4242
[CommandOption("-s|--sdk-dir", Description = "Install the SDK into a separate directory with the given name.")]
43-
[SerdeMemberOptions(DeserializeProxy = typeof(NullableRefProxy.Deserialize<SdkDirName, SdkDirNameProxy>))] // Treat as string
43+
[SerdeMemberOptions(DeserializeProxy = typeof(NullableRefProxy.De<SdkDirName, SdkDirNameProxy>))] // Treat as string
4444
public SdkDirName? SdkDir { get; init; } = null;
4545

4646
[CommandOption("-v|--verbose", Description = "Print debugging messages to the console.")]
@@ -159,7 +159,7 @@ public sealed partial record UninstallCommand : DnvmSubCommand
159159
public required SemVersion SdkVersion { get; init; }
160160

161161
[CommandOption("-s|--sdk-dir", Description = "Uninstall the SDK from the given directory.")]
162-
[SerdeMemberOptions(DeserializeProxy = typeof(NullableRefProxy.Deserialize<SdkDirName, SdkDirNameProxy>))] // Treat as string
162+
[SerdeMemberOptions(DeserializeProxy = typeof(NullableRefProxy.De<SdkDirName, SdkDirNameProxy>))] // Treat as string
163163
public SdkDirName? SdkDir { get; init; } = null;
164164
}
165165

@@ -185,8 +185,8 @@ public sealed partial record RestoreCommand : DnvmSubCommand
185185
/// </summary>
186186
private sealed class CaseInsensitiveChannel : IDeserializeProvider<Channel>, IDeserialize<Channel>
187187
{
188-
public static ISerdeInfo SerdeInfo => Serde.SerdeInfo.MakePrimitive(nameof(Channel));
189-
static IDeserialize<Channel> IDeserializeProvider<Channel>.DeserializeInstance { get; } = new CaseInsensitiveChannel();
188+
public ISerdeInfo SerdeInfo => StringProxy.SerdeInfo;
189+
static IDeserialize<Channel> IDeserializeProvider<Channel>.Instance { get; } = new CaseInsensitiveChannel();
190190
private CaseInsensitiveChannel() { }
191191

192192
public Channel Deserialize(IDeserializer deserializer)
@@ -326,7 +326,7 @@ public sealed record class CommandLineArguments(CommandArguments? Command)
326326
catch (ArgumentSyntaxException ex)
327327
{
328328
console.WriteLine("error: " + ex.Message);
329-
console.WriteLine(CmdLine.GetHelpText(SerdeInfoProvider.GetInfo<DnvmCommand>(), includeHelp: true));
329+
console.WriteLine(CmdLine.GetHelpText(SerdeInfoProvider.GetDeserializeInfo<DnvmCommand>(), includeHelp: true));
330330
return null;
331331
}
332332
}
@@ -344,7 +344,7 @@ public static CommandLineArguments ParseRaw(IAnsiConsole console, string[] args)
344344
dnvmCmd = value;
345345
break;
346346
case Result<DnvmCommand, IReadOnlyList<ISerdeInfo>>.Err(var helpInfos):
347-
var rootInfo = SerdeInfoProvider.GetInfo<DnvmCommand>();
347+
var rootInfo = SerdeInfoProvider.GetDeserializeInfo<DnvmCommand>();
348348
var lastInfo = helpInfos.Last();
349349
console.WriteLine(CmdLine.GetHelpText(rootInfo, lastInfo, includeHelp: true));
350350
return new CommandLineArguments(Command: null);
@@ -438,7 +438,7 @@ public static CommandLineArguments ParseRaw(IAnsiConsole console, string[] args)
438438
}
439439
case null:
440440
{
441-
console.WriteLine(CmdLine.GetHelpText(SerdeInfoProvider.GetInfo<DnvmCommand>(), includeHelp: true));
441+
console.WriteLine(CmdLine.GetHelpText(SerdeInfoProvider.GetDeserializeInfo<DnvmCommand>(), includeHelp: true));
442442
return new CommandLineArguments(Command: null);
443443
}
444444
}

src/dnvm/ManifestSchema/Manifest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ public partial record RegisteredChannel
7171
public required Channel ChannelName { get; init; }
7272
public required SdkDirName SdkDirName { get; init; }
7373
[SerdeMemberOptions(
74-
SerializeProxy = typeof(EqArrayProxy.Serialize<SemVersion, SemVersionProxy>),
75-
DeserializeProxy = typeof(EqArrayProxy.Deserialize<SemVersion, SemVersionProxy>))]
74+
SerializeProxy = typeof(EqArrayProxy.Ser<SemVersion, SemVersionProxy>),
75+
DeserializeProxy = typeof(EqArrayProxy.De<SemVersion, SemVersionProxy>))]
7676
public EqArray<SemVersion> InstalledSdkVersions { get; init; } = EqArray<SemVersion>.Empty;
7777
public bool Untracked { get; init; } = false;
7878
}

src/dnvm/ManifestSchema/ManifestV5.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ public partial record TrackedChannelV5
3939
public required Channel ChannelName { get; init; }
4040
public required SdkDirName SdkDirName { get; init; }
4141
[SerdeMemberOptions(
42-
SerializeProxy = typeof(EqArrayProxy.Serialize<SemVersion, SemVersionProxy>),
43-
DeserializeProxy = typeof(EqArrayProxy.Deserialize<SemVersion, SemVersionProxy>))]
42+
SerializeProxy = typeof(EqArrayProxy.Ser<SemVersion, SemVersionProxy>),
43+
DeserializeProxy = typeof(EqArrayProxy.De<SemVersion, SemVersionProxy>))]
4444
public EqArray<SemVersion> InstalledSdkVersions { get; init; } = EqArray<SemVersion>.Empty;
4545
}
4646

src/dnvm/ManifestSchema/ManifestV6.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ public partial record TrackedChannelV6
4141
public required Channel ChannelName { get; init; }
4242
public required SdkDirName SdkDirName { get; init; }
4343
[SerdeMemberOptions(
44-
SerializeProxy = typeof(EqArrayProxy.Serialize<SemVersion, SemVersionProxy>),
45-
DeserializeProxy = typeof(EqArrayProxy.Deserialize<SemVersion, SemVersionProxy>))]
44+
SerializeProxy = typeof(EqArrayProxy.Ser<SemVersion, SemVersionProxy>),
45+
DeserializeProxy = typeof(EqArrayProxy.De<SemVersion, SemVersionProxy>))]
4646
public EqArray<SemVersion> InstalledSdkVersions { get; init; } = EqArray<SemVersion>.Empty;
4747
public bool Untracked { get; init; } = false;
4848
}

src/dnvm/ManifestSchema/ManifestV7.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ public partial record RegisteredChannelV7
7070
public required Channel ChannelName { get; init; }
7171
public required SdkDirName SdkDirName { get; init; }
7272
[SerdeMemberOptions(
73-
SerializeProxy = typeof(EqArrayProxy.Serialize<SemVersion, SemVersionProxy>),
74-
DeserializeProxy = typeof(EqArrayProxy.Deserialize<SemVersion, SemVersionProxy>))]
73+
SerializeProxy = typeof(EqArrayProxy.Ser<SemVersion, SemVersionProxy>),
74+
DeserializeProxy = typeof(EqArrayProxy.De<SemVersion, SemVersionProxy>))]
7575
public EqArray<SemVersion> InstalledSdkVersions { get; init; } = EqArray<SemVersion>.Empty;
7676
public bool Untracked { get; init; } = false;
7777
}

0 commit comments

Comments
 (0)