fory_core/serializer/
refcell.rs1use crate::error::Error;
36use crate::resolver::context::{ReadContext, WriteContext};
37use crate::resolver::type_resolver::{TypeInfo, TypeResolver};
38use crate::serializer::{ForyDefault, Serializer};
39use crate::types::TypeId;
40use std::cell::RefCell;
41use std::rc::Rc;
42
43impl<T: Serializer + ForyDefault> Serializer for RefCell<T> {
48 fn fory_read(
49 context: &mut ReadContext,
50 read_ref_info: bool,
51 read_type_info: bool,
52 ) -> Result<Self, Error>
53 where
54 Self: Sized + ForyDefault,
55 {
56 Ok(RefCell::new(T::fory_read(
57 context,
58 read_ref_info,
59 read_type_info,
60 )?))
61 }
62
63 fn fory_read_with_type_info(
64 context: &mut ReadContext,
65 read_ref_info: bool,
66 type_info: Rc<TypeInfo>,
67 ) -> Result<Self, Error>
68 where
69 Self: Sized + ForyDefault,
70 {
71 Ok(RefCell::new(T::fory_read_with_type_info(
72 context,
73 read_ref_info,
74 type_info,
75 )?))
76 }
77
78 fn fory_read_data(context: &mut ReadContext) -> Result<Self, Error> {
79 Ok(RefCell::new(T::fory_read_data(context)?))
80 }
81
82 fn fory_read_type_info(context: &mut ReadContext) -> Result<(), Error> {
83 T::fory_read_type_info(context)
84 }
85
86 fn fory_write(
87 &self,
88 context: &mut WriteContext,
89 write_ref_info: bool,
90 write_type_info: bool,
91 has_generics: bool,
92 ) -> Result<(), Error> {
93 T::fory_write(
96 &*self.borrow(),
97 context,
98 write_ref_info,
99 write_type_info,
100 has_generics,
101 )
102 }
103
104 fn fory_write_data_generic(
105 &self,
106 context: &mut WriteContext,
107 has_generics: bool,
108 ) -> Result<(), Error> {
109 T::fory_write_data_generic(&*self.borrow(), context, has_generics)
110 }
111
112 fn fory_write_data(&self, context: &mut WriteContext) -> Result<(), Error> {
113 T::fory_write_data(&*self.borrow(), context)
114 }
115
116 fn fory_write_type_info(context: &mut WriteContext) -> Result<(), Error> {
117 T::fory_write_type_info(context)
118 }
119
120 fn fory_reserved_space() -> usize {
121 T::fory_reserved_space()
123 }
124
125 fn fory_get_type_id(type_resolver: &TypeResolver) -> Result<u32, Error> {
126 T::fory_get_type_id(type_resolver)
127 }
128
129 fn fory_type_id_dyn(&self, type_resolver: &TypeResolver) -> Result<u32, Error> {
130 (*self.borrow()).fory_type_id_dyn(type_resolver)
131 }
132
133 fn fory_static_type_id() -> TypeId
134 where
135 Self: Sized,
136 {
137 T::fory_static_type_id()
138 }
139
140 fn as_any(&self) -> &dyn std::any::Any {
141 self
142 }
143}
144
145impl<T: ForyDefault> ForyDefault for RefCell<T> {
146 fn fory_default() -> Self {
147 RefCell::new(T::fory_default())
148 }
149}