novax_data/types/
managed_vec.rs1use multiversx_sc::api::ManagedTypeApi;
2use multiversx_sc::codec::{NestedEncode, TopEncodeMulti};
3use multiversx_sc::types::{ManagedVec, ManagedVecItem};
4use multiversx_sc_scenario::api::StaticApi;
5use crate::types::managed::ManagedConvertible;
6use crate::types::native::NativeConvertible;
7
8impl<M: ManagedTypeApi, T: NativeConvertible + ManagedVecItem> NativeConvertible for ManagedVec<M, T> {
9 type Native = Vec<T::Native>;
10
11 fn to_native(&self) -> Self::Native {
12 self.into_iter().map(|e| e.to_native()).collect()
13 }
14}
15
16impl<C, T> ManagedConvertible<ManagedVec<StaticApi, T>> for Vec<C>
17where
18 C: ManagedConvertible<T>,
19 T: TopEncodeMulti + NestedEncode + ManagedVecItem
20{
21 fn to_managed(&self) -> ManagedVec<StaticApi, T> {
22 let mut result = ManagedVec::new();
23 for convertible_value in self {
24 result.push(convertible_value.to_managed());
25 }
26 result
27 }
28}
29
30#[cfg(test)]
31mod tests {
32 use multiversx_sc::types::{ManagedBuffer, ManagedVec};
33 use multiversx_sc_scenario::api::StaticApi;
34 use crate::types::managed::ManagedConvertible;
35 use crate::types::native::NativeConvertible;
36
37 #[test]
38 fn test_managed_vec_to_native() {
39 let mut managed_vec: ManagedVec<StaticApi, ManagedBuffer<StaticApi>> = ManagedVec::new();
40
41 managed_vec.push(ManagedBuffer::from("first"));
42 managed_vec.push(ManagedBuffer::from("second"));
43 managed_vec.push(ManagedBuffer::from("third"));
44
45 let native = managed_vec.to_native();
46 let expected = vec![
47 String::from("first"),
48 String::from("second"),
49 String::from("third")
50 ];
51
52 assert_eq!(
53 native,
54 expected
55 )
56 }
57
58 #[test]
59 fn test_vec_to_managed() {
60 let vec = vec![
61 "first".to_string(),
62 "second".to_string(),
63 "third".to_string()
64 ];
65
66
67 let mut expected_managed_vec: ManagedVec<StaticApi, ManagedBuffer<StaticApi>> = ManagedVec::new();
68
69 expected_managed_vec.push(ManagedBuffer::from("first"));
70 expected_managed_vec.push(ManagedBuffer::from("second"));
71 expected_managed_vec.push(ManagedBuffer::from("third"));
72
73 let result: ManagedVec<StaticApi, ManagedBuffer<StaticApi>> = vec.to_managed();
74
75 assert_eq!(
76 result,
77 expected_managed_vec
78 )
79 }
80}