@@ -24,44 +24,54 @@ pub struct WithCallbacks {
24
24
dst_callback : IbcDstCallback ,
25
25
}
26
26
27
- impl From < EmptyMemo > for Option < String > {
28
- fn from ( _: EmptyMemo ) -> Self {
27
+ pub trait MemoSource {
28
+ fn into_memo ( self ) -> Option < String > ;
29
+ }
30
+
31
+ impl MemoSource for EmptyMemo {
32
+ fn into_memo ( self ) -> Option < String > {
29
33
None
30
34
}
31
35
}
32
36
33
- impl From < WithMemo > for Option < String > {
34
- fn from ( m : WithMemo ) -> Self {
35
- Some ( m . memo )
37
+ impl MemoSource for WithMemo {
38
+ fn into_memo ( self ) -> Option < String > {
39
+ Some ( self . memo )
36
40
}
37
41
}
38
42
39
- impl From < WithSrcCallback > for Option < String > {
40
- fn from ( s : WithSrcCallback ) -> Self {
41
- Some ( to_json_string ( & IbcCallbackRequest :: source ( s . src_callback ) ) . unwrap ( ) )
43
+ impl MemoSource for WithSrcCallback {
44
+ fn into_memo ( self ) -> Option < String > {
45
+ Some ( to_json_string ( & IbcCallbackRequest :: source ( self . src_callback ) ) . unwrap ( ) )
42
46
}
43
47
}
44
48
45
- impl From < WithDstCallback > for Option < String > {
46
- fn from ( d : WithDstCallback ) -> Self {
47
- Some ( to_json_string ( & IbcCallbackRequest :: destination ( d . dst_callback ) ) . unwrap ( ) )
49
+ impl MemoSource for WithDstCallback {
50
+ fn into_memo ( self ) -> Option < String > {
51
+ Some ( to_json_string ( & IbcCallbackRequest :: destination ( self . dst_callback ) ) . unwrap ( ) )
48
52
}
49
53
}
50
54
51
- impl From < WithCallbacks > for Option < String > {
52
- fn from ( c : WithCallbacks ) -> Self {
53
- Some ( to_json_string ( & IbcCallbackRequest :: both ( c. src_callback , c. dst_callback ) ) . unwrap ( ) )
55
+ impl MemoSource for WithCallbacks {
56
+ fn into_memo ( self ) -> Option < String > {
57
+ Some (
58
+ to_json_string ( & IbcCallbackRequest :: both (
59
+ self . src_callback ,
60
+ self . dst_callback ,
61
+ ) )
62
+ . unwrap ( ) ,
63
+ )
54
64
}
55
65
}
56
66
57
- impl < T : Into < Option < String > > > TransferMsgBuilder < T > {
67
+ impl < M : MemoSource > TransferMsgBuilder < M > {
58
68
pub fn build ( self ) -> IbcMsg {
59
69
IbcMsg :: Transfer {
60
70
channel_id : self . channel_id ,
61
71
to_address : self . to_address ,
62
72
amount : self . amount ,
63
73
timeout : self . timeout ,
64
- memo : self . memo . into ( ) ,
74
+ memo : self . memo . into_memo ( ) ,
65
75
}
66
76
}
67
77
}
0 commit comments