fory_core/serializer/
mutex.rs1use crate::context::{ReadContext, WriteContext};
45use crate::error::Error;
46use crate::resolver::RefMode;
47use crate::resolver::{TypeInfo, TypeResolver};
48use crate::serializer::{ForyDefault, Serializer};
49use crate::type_id::TypeId;
50use std::rc::Rc;
51use std::sync::Mutex;
52
53impl<T: Serializer + ForyDefault> Serializer for Mutex<T> {
58 #[inline(always)]
59 fn fory_write(
60 &self,
61 context: &mut WriteContext,
62 ref_mode: RefMode,
63 write_type_info: bool,
64 has_generics: bool,
65 ) -> Result<(), Error> {
66 let guard = self.lock().unwrap();
69 T::fory_write(&*guard, context, ref_mode, write_type_info, has_generics)
70 }
71
72 #[inline(always)]
73 fn fory_write_data_generic(
74 &self,
75 context: &mut WriteContext,
76 has_generics: bool,
77 ) -> Result<(), Error> {
78 T::fory_write_data_generic(&*self.lock().unwrap(), context, has_generics)
79 }
80
81 #[inline(always)]
82 fn fory_write_data(&self, context: &mut WriteContext) -> Result<(), Error> {
83 let guard = self.lock().unwrap();
85 T::fory_write_data(&*guard, context)
86 }
87
88 #[inline(always)]
89 fn fory_write_type_info(context: &mut WriteContext) -> Result<(), Error> {
90 T::fory_write_type_info(context)
91 }
92
93 #[inline(always)]
94 fn fory_reserved_space() -> usize {
95 T::fory_reserved_space()
97 }
98
99 #[inline(always)]
100 fn fory_read(
101 context: &mut ReadContext,
102 ref_mode: RefMode,
103 read_type_info: bool,
104 ) -> Result<Self, Error>
105 where
106 Self: Sized + ForyDefault,
107 {
108 Ok(Mutex::new(T::fory_read(context, ref_mode, read_type_info)?))
109 }
110
111 #[inline(always)]
112 fn fory_read_with_type_info(
113 context: &mut ReadContext,
114 ref_mode: RefMode,
115 type_info: Rc<TypeInfo>,
116 ) -> Result<Self, Error>
117 where
118 Self: Sized + ForyDefault,
119 {
120 Ok(Mutex::new(T::fory_read_with_type_info(
121 context, ref_mode, type_info,
122 )?))
123 }
124
125 #[inline(always)]
126 fn fory_read_data(context: &mut ReadContext) -> Result<Self, Error> {
127 Ok(Mutex::new(T::fory_read_data(context)?))
128 }
129
130 #[inline(always)]
131 fn fory_read_type_info(context: &mut ReadContext) -> Result<(), Error> {
132 T::fory_read_type_info(context)
133 }
134
135 #[inline(always)]
136 fn fory_get_type_id(type_resolver: &TypeResolver) -> Result<TypeId, Error> {
137 T::fory_get_type_id(type_resolver)
138 }
139
140 #[inline(always)]
141 fn fory_get_type_info(type_resolver: &TypeResolver) -> Result<Rc<TypeInfo>, Error> {
142 T::fory_get_type_info(type_resolver)
143 }
144
145 #[inline(always)]
146 fn fory_type_id_dyn(&self, type_resolver: &TypeResolver) -> Result<TypeId, Error> {
147 let guard = self.lock().unwrap();
148 (*guard).fory_type_id_dyn(type_resolver)
149 }
150
151 #[inline(always)]
152 fn fory_static_type_id() -> TypeId {
153 T::fory_static_type_id()
154 }
155
156 #[inline(always)]
157 fn fory_is_wrapper_type() -> bool
158 where
159 Self: Sized,
160 {
161 true
162 }
163
164 #[inline(always)]
165 fn as_any(&self) -> &dyn std::any::Any {
166 self
167 }
168}
169
170impl<T: ForyDefault> ForyDefault for Mutex<T> {
171 fn fory_default() -> Self {
172 Mutex::new(T::fory_default())
173 }
174}