using AyCode.Core.Serializers.Attributes;
namespace AyCode.Core.Tests.TestModels;
///
/// Intentionally NOT marked with [AcBinarySerializable].
/// Used to reproduce the generated-writer path where the parent has a complex reference property
/// without a generated writer on the child type.
///
public class NonGeneratedComplexCustomer
{
public int Id { get; set; }
public string? Name { get; set; }
}
///
/// Regression model for SGen complex-property null handling.
/// The Customer property is non-nullable in signature, but runtime data can still contain null.
/// Serializer must emit PropertySkip instead of dereferencing null.
///
[AcBinarySerializable]
public class SGenNullComplexParent
{
public int Id { get; set; }
public NonGeneratedComplexCustomer Customer { get; set; } = null!;
public string? Note { get; set; }
}
///
/// Regression model for SGen Collection-property null handling — the fallback WriteValueGenerated
/// branch in GenWriter.cs PropertyTypeKind.Collection case (~line 321), when the element type has
/// no generated writer (cross-assembly / unattributed). The Items property is non-nullable in
/// signature, but runtime data can still contain null. Serializer must emit PropertySkip instead
/// of forwarding null into the WriteValueGenerated bridge.
///
[AcBinarySerializable]
public class SGenNullCollectionParent
{
public int Id { get; set; }
public List Items { get; set; } = null!;
public string? Note { get; set; }
}
///
/// Regression model for SGen Dictionary-property null handling — the EmitDirectDictionaryWrite
/// branch in GenWriter.cs (~line 1031). The branch was already null-safe at the time of the
/// N4P8 audit (explicit `if (a == null) PropertySkip` at line ~1037), but no regression test
/// existed to pin the behaviour. The Mapping property is non-nullable in signature, but runtime
/// data can still contain null — same pattern as /
/// .
///
[AcBinarySerializable]
public class SGenNullDictionaryParent
{
public int Id { get; set; }
public Dictionary Mapping { get; set; } = null!;
public string? Note { get; set; }
}