diff --git a/src/ZeroSerializerGenerator.cs b/src/ZeroSerializerGenerator.cs index 53c9e9a..af0151e 100644 --- a/src/ZeroSerializerGenerator.cs +++ b/src/ZeroSerializerGenerator.cs @@ -1736,6 +1736,10 @@ private static void CreateShapeTag(ITypeSymbol typeSymbol, StringBuilder shapeTa { var underlying = nullableType.TypeArguments[0]; CreateShapeTag(underlying, shapeTagBuilder); + if (underlying is INamedTypeSymbol named && named.TypeKind == TypeKind.Struct && !TryGetBlittableStructByteCount(named, out _)) + { + return; + } shapeTagBuilder.Append('?'); return; } diff --git a/tests/ShapeTagAndHashTests.cs b/tests/ShapeTagAndHashTests.cs index 6a7e9bb..e2b07e5 100644 --- a/tests/ShapeTagAndHashTests.cs +++ b/tests/ShapeTagAndHashTests.cs @@ -48,7 +48,7 @@ public void EnumClassViewTest() [Fact] public void SchemaSignatureTestsModelViewTest() { - string schemaSignatureExpected = "v1/{blittable{int,enum:short},{int,enum:byte},blittable{int,enum:short}[],{},blittable{},{enum:byte,enum:short}?,enum:byte[],enum:ulong[],int?,bool?}"; + string schemaSignatureExpected = "v1/{blittable{int,enum:short},{int,enum:byte},blittable{int,enum:short}[],{},blittable{},{enum:byte,enum:short},enum:byte[],enum:ulong[],int?,bool?}"; Assert.Equal(SchemaSignatureTestsModelView.ShapeTag, schemaSignatureExpected); Assert.Equal(SchemaSignatureTestsModelView.ShapeHash, XXHash32.HashToUInt32(schemaSignatureExpected)); }