Basalt.Generators.Codec
0.2.0
See the version list below for details.
dotnet add package Basalt.Generators.Codec --version 0.2.0
NuGet\Install-Package Basalt.Generators.Codec -Version 0.2.0
<PackageReference Include="Basalt.Generators.Codec" Version="0.2.0" />
<PackageVersion Include="Basalt.Generators.Codec" Version="0.2.0" />
<PackageReference Include="Basalt.Generators.Codec" />
paket add Basalt.Generators.Codec --version 0.2.0
#r "nuget: Basalt.Generators.Codec, 0.2.0"
#:package Basalt.Generators.Codec@0.2.0
#addin nuget:?package=Basalt.Generators.Codec&version=0.2.0
#tool nuget:?package=Basalt.Generators.Codec&version=0.2.0
Basalt.Generators.Codec
Incremental source generator for deterministic binary serialization. Generates WriteTo, ReadFrom, and GetSerializedSize methods for types annotated with [BasaltSerializable].
Trigger
Annotate any partial struct or partial class with [BasaltSerializable] (full name: Basalt.Sdk.Contracts.BasaltSerializableAttribute). The generator discovers all public instance fields and properties (with both getter and setter) in declaration order.
[BasaltSerializable]
public partial struct MyStruct
{
public ulong Id { get; set; }
public Address Owner { get; set; }
public UInt256 Amount { get; set; }
}
Generated Methods
For each annotated type, the generator emits a partial type extension in {TypeName}.BasaltCodec.g.cs containing:
void WriteTo(ref BasaltWriter writer)-- Serializes each member in declaration order using the correspondingBasaltWriter.Write*method.static T ReadFrom(ref BasaltReader reader)-- Deserializes a new instance by reading each member in order via the correspondingBasaltReader.Read*method. Structs usedefault(T), classes usenew T().int GetSerializedSize()-- Returns the exact byte count for fixed-size types. Variable-size types (string,byte[]) use a 64-byte estimate.
Supported Types
| Type | Write Method | Read Method | Fixed Size |
|---|---|---|---|
byte |
WriteByte |
ReadByte |
1 |
ushort |
WriteUInt16 |
ReadUInt16 |
2 |
uint |
WriteUInt32 |
ReadUInt32 |
4 |
int |
WriteInt32 |
ReadInt32 |
4 |
ulong |
WriteUInt64 |
ReadUInt64 |
8 |
long |
WriteInt64 |
ReadInt64 |
8 |
bool |
WriteBool |
ReadBool |
1 |
string |
WriteString |
ReadString |
variable |
byte[] |
WriteBytes |
ReadBytes().ToArray |
variable |
Hash256 |
WriteHash256 |
ReadHash256 |
32 |
Address |
WriteAddress |
ReadAddress |
20 |
UInt256 |
WriteUInt256 |
ReadUInt256 |
32 |
Signature |
WriteSignature |
ReadSignature |
64 |
PublicKey |
WritePublicKey |
ReadPublicKey |
32 |
BlsSignature |
WriteBlsSignature |
ReadBlsSignature |
96 |
BlsPublicKey |
WriteBlsPublicKey |
ReadBlsPublicKey |
48 |
Unsupported field types are skipped with a comment in the generated code.
Architecture
CodecGenerator implements IIncrementalGenerator. It uses ForAttributeWithMetadataName to locate annotated types, extracts member metadata into an equatable model (TypeToGenerate with EquatableArray<MemberInfo>), and emits source only when the model changes. Fully-qualified Roslyn type names (e.g. global::System.UInt64) are normalized to C# keyword forms before mapping to read/write methods.
Dependencies
| Package | Purpose |
|---|---|
Microsoft.CodeAnalysis.CSharp |
Roslyn compiler APIs |
Microsoft.CodeAnalysis.Analyzers |
Analyzer development helpers |
Target framework: netstandard2.0 (required for source generators).
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.