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

Method fory_write

rust/fory-core/src/serializer/option.rs:29–66  ·  view source on GitHub ↗
(
        &self,
        context: &mut WriteContext,
        ref_mode: RefMode,
        write_type_info: bool,
        has_generics: bool,
    )

Source from the content-addressed store, hash-verified

27impl<T: Serializer + ForyDefault> Serializer for Option<T> {
28 #[inline(always)]
29 fn fory_write(
30 &self,
31 context: &mut WriteContext,
32 ref_mode: RefMode,
33 write_type_info: bool,
34 has_generics: bool,
35 ) -> Result<(), Error> {
36 match ref_mode {
37 RefMode::None => {
38 // Write inner directly, no null check
39 if let Some(v) = self {
40 T::fory_write(v, context, RefMode::None, write_type_info, has_generics)
41 } else {
42 // None with RefMode::None is a protocol error
43 Err(Error::invalid_data("Option::None with RefMode::None"))
44 }
45 }
46 RefMode::NullOnly => {
47 if let Some(v) = self {
48 context.writer.write_i8(RefFlag::NotNullValue as i8);
49 T::fory_write(v, context, RefMode::None, write_type_info, has_generics)
50 } else {
51 context.writer.write_i8(RefFlag::Null as i8);
52 Ok(())
53 }
54 }
55 RefMode::Tracking => {
56 // Only handle null here, pass Tracking to inner for ref handling
57 if let Some(v) = self {
58 // DON'T write flag here - inner (e.g. Rc) handles RefValue/Ref flags
59 T::fory_write(v, context, RefMode::Tracking, write_type_info, has_generics)
60 } else {
61 context.writer.write_i8(RefFlag::Null as i8);
62 Ok(())
63 }
64 }
65 }
66 }
67
68 #[inline(always)]
69 fn fory_write_data(&self, context: &mut WriteContext) -> Result<(), Error> {

Callers

nothing calls this directly

Calls 1

write_i8Method · 0.80

Tested by

no test coverage detected