(&self, encoder: &mut E)
| 33 | |
| 34 | impl Encode for Value { |
| 35 | fn encode<E: Encoder>(&self, encoder: &mut E) -> Result<(), EncodeError> { |
| 36 | let helper = match self { |
| 37 | Value::Int(i) => ValueSerde::Int(*i), |
| 38 | Value::Float(f) => ValueSerde::Float(*f), |
| 39 | Value::Bool(b) => ValueSerde::Bool(*b), |
| 40 | Value::String(rc_str) => ValueSerde::String(rc_str.as_ref().clone()), |
| 41 | Value::Void => ValueSerde::Void, |
| 42 | Value::Object(obj_rc) => { |
| 43 | let obj = obj_rc.borrow(); |
| 44 | if let Some(instance) = obj.as_any().downcast_ref::<Instance>() { |
| 45 | ValueSerde::Object(SerializableObject::Instance { |
| 46 | fields: instance.fields.clone(), |
| 47 | }) |
| 48 | } else if let Some(list) = obj.as_any().downcast_ref::<List>() { |
| 49 | ValueSerde::Object(SerializableObject::List { |
| 50 | elements: list.elements.clone(), |
| 51 | }) |
| 52 | } else { |
| 53 | return Err(EncodeError::Other( |
| 54 | "Unsupported object type for serialization", |
| 55 | )); |
| 56 | } |
| 57 | } |
| 58 | }; |
| 59 | |
| 60 | helper.encode(encoder) |
| 61 | } |
| 62 | } |
| 63 | |
| 64 | #[derive(Serialize, Deserialize, Encode)] |
no test coverage detected