MCPcopy Create free account
hub / github.com/apache/fory / Write

Method Write

csharp/src/Fory/OptionalSerializer.cs:42–78  ·  view source on GitHub ↗
(WriteContext context, in T? value, RefMode refMode, bool writeTypeInfo, bool hasGenerics)

Source from the content-addressed store, hash-verified

40 }
41
42 public override void Write(WriteContext context, in T? value, RefMode refMode, bool writeTypeInfo, bool hasGenerics)
43 {
44 Serializer<T> wrappedSerializer = context.TypeResolver.GetSerializer<T>();
45 switch (refMode)
46 {
47 case RefMode.None:
48 if (!value.HasValue)
49 {
50 throw new InvalidDataException("Nullable<T>.None with RefMode.None");
51 }
52
53 T wrapped = value.Value;
54 wrappedSerializer.Write(context, wrapped, RefMode.None, writeTypeInfo, hasGenerics);
55 break;
56 case RefMode.NullOnly:
57 if (!value.HasValue)
58 {
59 context.Writer.WriteInt8((sbyte)RefFlag.Null);
60 return;
61 }
62
63 context.Writer.WriteInt8((sbyte)RefFlag.NotNullValue);
64 wrappedSerializer.Write(context, value.Value, RefMode.None, writeTypeInfo, hasGenerics);
65 break;
66 case RefMode.Tracking:
67 if (!value.HasValue)
68 {
69 context.Writer.WriteInt8((sbyte)RefFlag.Null);
70 return;
71 }
72
73 wrappedSerializer.Write(context, value.Value, RefMode.Tracking, writeTypeInfo, hasGenerics);
74 break;
75 default:
76 throw new InvalidDataException($"unsupported ref mode {refMode}");
77 }
78 }
79
80 public override T? Read(ReadContext context, RefMode refMode, bool readTypeInfo)
81 {

Callers

nothing calls this directly

Calls 2

WriteMethod · 0.65
WriteInt8Method · 0.45

Tested by

no test coverage detected