@@ -11,10 +11,22 @@ pub enum TokenTransferMetadatum {
1111 V1 ( TokenTransferMetadatumV1 ) ,
1212}
1313
14+ impl TokenTransferMetadatum {
15+ /// Creates v1 reserve transfer metadatum
16+ pub fn reserve_v1 ( ) -> Self {
17+ Self :: V1 ( TokenTransferMetadatumV1 :: ReserveTransfer )
18+ }
19+
20+ /// Creates v1 user transfer metadatum
21+ pub fn user_v1 ( receiver : ByteString ) -> Self {
22+ Self :: V1 ( TokenTransferMetadatumV1 :: UserTransfer { receiver } )
23+ }
24+ }
25+
1426impl VersionedMetadatum for TokenTransferMetadatum {
1527 fn decode_version ( version : i32 , payload : TransactionMetadatum ) -> Result < Self , JsError > {
1628 match version {
17- 1 => Ok ( Self :: V1 ( payload . try_into ( ) ?) ) ,
29+ 1 => Ok ( Self :: V1 ( TokenTransferMetadatumV1 :: decode_payload ( payload ) ?) ) ,
1830 _ => Err ( JsError :: from_str ( & format ! (
1931 "Unsupported TokenTransferMetadatum version {version}"
2032 ) ) ) ,
@@ -29,7 +41,7 @@ impl VersionedMetadatum for TokenTransferMetadatum {
2941
3042 fn encode_payload ( & self ) -> Result < TransactionMetadatum , JsError > {
3143 match self {
32- Self :: V1 ( v1) => v1. clone ( ) . try_into ( ) ,
44+ Self :: V1 ( v1) => v1. encode_payload ( ) ,
3345 }
3446 }
3547}
@@ -46,10 +58,8 @@ pub enum TokenTransferMetadatumV1 {
4658 ReserveTransfer ,
4759}
4860
49- impl TryFrom < TransactionMetadatum > for TokenTransferMetadatumV1 {
50- type Error = JsError ;
51-
52- fn try_from ( value : TransactionMetadatum ) -> Result < Self , Self :: Error > {
61+ impl TokenTransferMetadatumV1 {
62+ fn decode_payload ( value : TransactionMetadatum ) -> Result < Self , JsError > {
5363 if let Ok ( "reserve" ) = value. as_text ( ) . as_deref ( ) {
5464 return Ok ( Self :: ReserveTransfer ) ;
5565 }
@@ -58,22 +68,20 @@ impl TryFrom<TransactionMetadatum> for TokenTransferMetadatumV1 {
5868 receiver : ByteString ( value. as_map ( ) ?. get_str ( "receiver" ) ?. as_bytes ( ) ?) ,
5969 } )
6070 }
61- }
62-
63- impl TryFrom < TokenTransferMetadatumV1 > for TransactionMetadatum {
64- type Error = JsError ;
6571
66- fn try_from ( value : TokenTransferMetadatumV1 ) -> Result < Self , Self :: Error > {
67- match value {
72+ fn encode_payload ( & self ) -> Result < TransactionMetadatum , JsError > {
73+ match self {
74+ TokenTransferMetadatumV1 :: ReserveTransfer => {
75+ Ok ( TransactionMetadatum :: new_text ( "reserve" . to_string ( ) ) ?)
76+ } ,
6877 TokenTransferMetadatumV1 :: UserTransfer { receiver } => {
6978 let receiver_label = TransactionMetadatum :: new_text ( "receiver" . to_string ( ) ) ?;
7079 let receiver_bytes = TransactionMetadatum :: new_bytes ( receiver. to_vec ( ) ) ?;
7180
7281 let mut map = MetadataMap :: new ( ) ;
7382 map. insert ( & receiver_label, & receiver_bytes) ;
74- Ok ( Self :: new_map ( & map) )
83+ Ok ( TransactionMetadatum :: new_map ( & map) )
7584 } ,
76- TokenTransferMetadatumV1 :: ReserveTransfer => Ok ( Self :: new_text ( "reserve" . to_string ( ) ) ?) ,
7785 }
7886 }
7987}
0 commit comments