novax_data/types/
buffer.rs1use multiversx_sc::api::ManagedTypeApi;
2use multiversx_sc::types::{EgldOrEsdtTokenIdentifier, ManagedBuffer, TokenIdentifier};
3use multiversx_sc_scenario::api::StaticApi;
4use crate::constants::EGLD_TOKEN_IDENTIFIER;
5use crate::types::managed::ManagedConvertible;
6use crate::types::native::NativeConvertible;
7
8impl NativeConvertible for String {
9 type Native = String;
10
11 fn to_native(&self) -> Self::Native {
12 self.clone()
13 }
14}
15
16impl<M: ManagedTypeApi> NativeConvertible for ManagedBuffer<M> {
17 type Native = String;
18
19 fn to_native(&self) -> Self::Native {
20 let bytes = self.to_boxed_bytes();
21 let result = String::from_utf8_lossy(bytes.as_slice());
22
23 result.to_string()
24 }
25}
26
27impl<M: ManagedTypeApi> NativeConvertible for TokenIdentifier<M> {
28 type Native = String;
29
30 fn to_native(&self) -> Self::Native {
31 self.as_managed_buffer().to_native()
32 }
33}
34
35impl<M: ManagedTypeApi> NativeConvertible for EgldOrEsdtTokenIdentifier<M> {
36 type Native = String;
37
38 fn to_native(&self) -> Self::Native {
39 if self.is_egld() {
40 EGLD_TOKEN_IDENTIFIER.to_string()
41 } else {
42 self.clone().unwrap_esdt().to_native()
43 }
44 }
45}
46
47impl ManagedConvertible<ManagedBuffer<StaticApi>> for String {
48 fn to_managed(&self) -> ManagedBuffer<StaticApi> {
49 ManagedBuffer::from(self.as_bytes())
50 }
51}
52
53impl ManagedConvertible<TokenIdentifier<StaticApi>> for String {
54 fn to_managed(&self) -> TokenIdentifier<StaticApi> {
55 TokenIdentifier::from(self.as_bytes())
56 }
57}
58
59impl ManagedConvertible<EgldOrEsdtTokenIdentifier<StaticApi>> for String {
60 fn to_managed(&self) -> EgldOrEsdtTokenIdentifier<StaticApi> {
61 if self == EGLD_TOKEN_IDENTIFIER {
62 EgldOrEsdtTokenIdentifier::egld()
63 } else {
64 let token_identifier: TokenIdentifier<StaticApi> = self.to_managed();
65 EgldOrEsdtTokenIdentifier::esdt(token_identifier)
66 }
67 }
68}
69
70#[cfg(test)]
71mod tests {
72 use multiversx_sc::types::{ManagedBuffer, TokenIdentifier};
73 use multiversx_sc_scenario::api::StaticApi;
74 use crate::types::managed::ManagedConvertible;
75 use crate::types::native::NativeConvertible;
76
77 #[test]
78 fn test_managed_buffer_to_native() {
79 let buffer: ManagedBuffer<StaticApi> = ManagedBuffer::from("This is a buffer");
80 let native = buffer.to_native();
81
82 let expected = String::from("This is a buffer");
83
84 assert_eq!(
85 native,
86 expected
87 );
88 }
89
90 #[test]
91 fn test_token_identifier_to_native() {
92 let buffer: TokenIdentifier<StaticApi> = TokenIdentifier::from("WEGLD-abcdef");
93 let native = buffer.to_native();
94
95 let expected = String::from("WEGLD-abcdef");
96
97 assert_eq!(
98 native,
99 expected
100 );
101 }
102
103 #[test]
104 fn test_string_to_managed_buffer() {
105 let value = "This is a buffer".to_string();
106 let managed: ManagedBuffer<StaticApi> = value.to_managed();
107
108 assert_eq!(
109 value.as_bytes(),
110 managed.to_boxed_bytes().as_slice()
111 );
112 }
113
114 #[test]
115 fn test_string_to_token_identifier() {
116 let value = "WEGLD-abcdef".to_string();
117 let managed: TokenIdentifier<StaticApi> = value.to_managed();
118
119 assert_eq!(
120 value.as_bytes(),
121 managed.to_boxed_bytes().as_slice()
122 );
123 }
124}