Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
f0a56b3
feat: tracking commit
glomdom Nov 12, 2025
d7e1769
feat(segmenting): stub out segmenting model
glomdom Nov 12, 2025
a52b614
chore(segmenting): licensify
glomdom Nov 12, 2025
7a8a608
chore: add some debug logging
glomdom Nov 12, 2025
87a379a
fix: nesting
glomdom Nov 12, 2025
9733d8d
fix: control flow
glomdom Nov 12, 2025
efe7f2d
feat(segmenting): hook up segment manager to generator and generate s…
glomdom Nov 12, 2025
8b60725
chore(segmenting): add debug logging to commits
glomdom Nov 12, 2025
f4e7553
chore(segmenting): log final commit
glomdom Nov 12, 2025
3cd7ec8
fix(generator): add segment for primitives
glomdom Nov 12, 2025
61ead5f
feat(segmenting): generate fixed segments for const-sized arrays
glomdom Nov 12, 2025
fabe4d0
feat: add type information to field def
glomdom Nov 13, 2025
440731f
feat: add array size to fielddef
glomdom Nov 13, 2025
4493468
chore: encapsulate
glomdom Nov 13, 2025
b6fa085
chore: licensify
glomdom Nov 13, 2025
5ff95dc
feat: start stubbing out span logic
glomdom Nov 13, 2025
f9a1109
feat: basic span reading
glomdom Nov 17, 2025
d18d4df
fix: undefined behavior with shared references of contexts
glomdom Nov 17, 2025
954c766
fix: re-add attribute to tests
glomdom Nov 17, 2025
60847eb
chore: cleanup
glomdom Nov 17, 2025
e55cef8
fix: regresion tests
glomdom Nov 17, 2025
64ef81b
fix: guarantee proper amount of bytes read
glomdom Nov 17, 2025
d8d0d87
fix: method doesnt exist
glomdom Nov 17, 2025
b2bd190
fix: proper array length
glomdom Nov 17, 2025
bdcd41e
feat: prepare to segment const arrays
glomdom Nov 17, 2025
8319260
feat: span-read const-sized arrays
glomdom Nov 17, 2025
681dcf9
chore(csproj): target a higher C# version
glomdom Nov 27, 2025
153835f
fix: use public-facing internal types from mscorlib
glomdom Nov 27, 2025
4c074d2
fix: stupid test comparing bug
glomdom Nov 27, 2025
d61dd6a
chore: sort imports
glomdom Nov 27, 2025
4c607a1
fix: follow analyzer unshipped standard
glomdom Nov 27, 2025
1ce9dbb
feat: named tuple
glomdom Nov 27, 2025
475089d
fix: use named instead of `Item1`
glomdom Nov 27, 2025
ecc8bee
feat(segmenting): record dynamic segments to manager
glomdom Nov 27, 2025
0d61ad5
feat: generate fields with `SizeMember` arg
glomdom Nov 27, 2025
6216534
feat: attempt to support uint/int
glomdom Nov 16, 2025
0f42398
feat(test): test dynamics /doesnt work/
glomdom Nov 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 12 additions & 11 deletions BinaryWizard.Sample/SampleEntity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,18 @@ namespace BinaryWizard.Sample;

[BinarySerializable]
public partial class SampleEntity {
public int VectorCount;
public int IntegersCount;

[BinaryArray(Size = 2)] public SampleVector[] ConstantSizeVectors;

[BinaryArray(SizeMember = nameof(VectorCount))]
public SampleVector[] DynamicSizeVectors;
// [BinaryArray(Size = 2)] public int[] ConstantInts;
// [BinaryArray(Size = 2)] public SampleVector[] ConstantSizeVectors;
//
[BinaryArray(SizeMember = nameof(IntegersCount))]
public int[] DynamicSizeVectors;
}

[BinarySerializable]
public partial class SampleVector {
public int X;
public int Y;
public int Z;
}
// [BinarySerializable]
// public partial class SampleVector {
// public int X;
// public int Y;
// public int Z;
// }
10 changes: 10 additions & 0 deletions BinaryWizard.Tests/Samples/Arrays.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace BinaryWizard.Tests.Samples;

[BinarySerializable]
public partial struct Arrays {
[BinaryArray(Size = 16)] public int[] NumberArray;
public int OtherNumbersSize;

[BinaryArray(SizeMember = nameof(OtherNumbersSize))]
public int[] OtherNumbers;
}
16 changes: 8 additions & 8 deletions BinaryWizard.Tests/Samples/Entity.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
namespace BinaryWizard.Tests.Samples;

[BinarySerializable]
public partial struct Entity {
public int Id;
public string Name;
public Vector3 Position;
}
// namespace BinaryWizard.Tests.Samples;
//
// [BinarySerializable]
// public partial struct Entity {
// public int Id;
// public string Name;
// public Vector3 Position;
// }
58 changes: 45 additions & 13 deletions BinaryWizard.Tests/SerializerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,31 +34,63 @@ public void Vector3_CorrectlySerialized() {
using var reader = new BinaryReader(stream);

var actual = Vector3.FromBinary(reader);
var expected = new Vector3 { X = 1, Y = 2, Z = 3 };
var expected = new Vector3 {
X = 1, Y = 2, Z = 3,
};

Assert.Equal(expected, actual);
}

[Fact]
public void Entity_CorrectlySerialized() {
public void Arrays_CorrectlySerialized() {
using var stream = new MemoryStream();
using (var writer = new BinaryWriter(stream, Encoding.UTF8, leaveOpen: true)) {
writer.Write(69); // Id
writer.Write("glomdom"); // Name

// Position: Vector3
writer.Write(1); // X
writer.Write(2); // Y
writer.Write(3); // Z
for (var i = 0; i < 16; i++) {
writer.Write(i);
}

writer.Write(4);

for (var i = 0; i < 4; i++) {
writer.Write(i);
}
}

stream.Position = 0;

using var reader = new BinaryReader(stream);
var actual = Arrays.FromBinary(reader);
var expected = new Arrays {
NumberArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
OtherNumbersSize = 4,
OtherNumbers = [0, 1, 2, 3],
};

var actual = Entity.FromBinary(reader);
var expected = new Entity { Id = 69, Name = "glomdom", Position = new Vector3 { X = 1, Y = 2, Z = 3 } };

Assert.Equal(expected, actual);
Assert.Equal(expected.NumberArray, actual.NumberArray);
Assert.Equal(expected.OtherNumbersSize, actual.OtherNumbersSize);
Assert.Equal(expected.OtherNumbers, actual.OtherNumbers);
}

// [Fact]
// public void Entity_CorrectlySerialized() {
// using var stream = new MemoryStream();
// using (var writer = new BinaryWriter(stream, Encoding.UTF8, leaveOpen: true)) {
// writer.Write(69); // Id
// writer.Write("glomdom"); // Name
//
// // Position: Vector3
// writer.Write(1); // X
// writer.Write(2); // Y
// writer.Write(3); // Z
// }
//
// stream.Position = 0;
//
// using var reader = new BinaryReader(stream);
//
// var actual = Entity.FromBinary(reader);
// var expected = new Entity { Id = 69, Name = "glomdom", Position = new Vector3 { X = 1, Y = 2, Z = 3 } };
//
// Assert.Equal(expected, actual);
// }
}
10 changes: 5 additions & 5 deletions BinaryWizard/AnalyzerReleases.Unshipped.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
### New Rules

Rule ID | Category | Severity | Notes
--------|----------|----------|----------
BW0001 | Usage | Error | Object is not marked with `[BinarySerializable]` inside marked object.
BW0002 | Usage | Error | Array type does not have a `[BinaryArray]` attribute.
BW0003 | Usage | Error | Array marked with `[BinaryArray]` is missing argument defining size.
BW0004 | Usage | Error | Array marked with `[BinaryArray]` has conflicting size arguments.
--------|----------|----------|-------------
BW0001 | Usage | Error | BinaryWizard
BW0002 | Usage | Error | BinaryWizard
BW0003 | Usage | Error | BinaryWizard
BW0004 | Usage | Error | BinaryWizard
2 changes: 1 addition & 1 deletion BinaryWizard/BinaryWizard.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<TargetFramework>netstandard2.0</TargetFramework>
<IsPackable>false</IsPackable>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
<LangVersion>13</LangVersion>

<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
<IsRoslynComponent>true</IsRoslynComponent>
Expand Down
5 changes: 5 additions & 0 deletions BinaryWizard/Context.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
namespace BinaryWizard;

public sealed record Context {
public int Offset { get; set; }
}
27 changes: 27 additions & 0 deletions BinaryWizard/DebugUtilities.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright 2025 glomdom
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

using System.Diagnostics;
using BinaryWizard.Model;

namespace BinaryWizard;

public static class DebugUtilities {
[Conditional("DEBUG")]
public static void CreatedFieldDef(FieldDef def) {
Debug.WriteLine($"Created field definition {def.Name} of {def.TypeModel.Type} ({def.ByteSize} bytes) (dynamic? {def.IsDynamic})");
}
}
Loading