diff options
Diffstat (limited to 'examples/15-transient-0/output/rust/src/data.rs')
| -rw-r--r-- | examples/15-transient-0/output/rust/src/data.rs | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/examples/15-transient-0/output/rust/src/data.rs b/examples/15-transient-0/output/rust/src/data.rs index 2cf748b..cc0eb13 100644 --- a/examples/15-transient-0/output/rust/src/data.rs +++ b/examples/15-transient-0/output/rust/src/data.rs @@ -17,7 +17,7 @@ pub mod transient_0 { use ::std::any::Any; use ::std::sync::Arc; use ::std::vec::Vec; - use super::Native; + use super::{GenericNative, Native}; include!("./gen/data/transient_0.rs"); @@ -39,4 +39,38 @@ pub mod transient_0 { let b = crate::transient_0::decode_int_32(reader, shared_values)?; Ok(Native { a, b }) } + + type Encode<T, TWrite: std::io::Write> = fn( + &T, + &mut TWrite, + &mut ::std::collections::HashMap::<usize, i64>, + ) -> std::io::Result<()>; + + type Decode<TRead: std::io::Read, T> = fn( + &mut TRead, + &mut Vec<Arc::<dyn Any + Sync + Send>>, + ) -> std::io::Result<T>; + + pub fn encode_generic_native<TWrite: std::io::Write, A, B>( + value: &GenericNative<A, B>, + writer: &mut TWrite, + shared_values: &mut ::std::collections::HashMap::<usize, i64>, + encode_a: Encode<A, TWrite>, + encode_b: Encode<B, TWrite>, + ) -> std::io::Result<()> { + encode_a(&value.a, writer, shared_values)?; + encode_b(&value.b, writer, shared_values)?; + Ok(()) + } + + pub fn decode_generic_native<TRead: std::io::Read, A, B>( + reader: &mut TRead, + shared_values: &mut Vec<Arc::<dyn Any + Sync + Send>>, + decode_a: Decode<TRead, A>, + decode_b: Decode<TRead, B>, + ) -> std::io::Result<GenericNative<A, B>> { + let a = decode_a(reader, shared_values)?; + let b = decode_b(reader, shared_values)?; + Ok(GenericNative { a, b }) + } } |
