@@ -11,10 +11,12 @@ use super::TransactionExpiration;
11
11
feature = "serde" ,
12
12
derive( serde_derive:: Serialize , serde_derive:: Deserialize )
13
13
) ]
14
+ #[ cfg_attr( feature = "schemars" , derive( schemars:: JsonSchema ) ) ]
14
15
pub struct UnresolvedTransaction {
15
16
#[ cfg_attr( feature = "serde" , serde( flatten) ) ]
16
17
pub ptb : UnresolvedProgrammableTransaction ,
17
18
pub sender : Address ,
19
+ #[ cfg_attr( feature = "serde" , serde( skip_serializing_if = "Option::is_none" , ) ) ]
18
20
pub gas_payment : Option < UnresolvedGasPayment > ,
19
21
pub expiration : TransactionExpiration ,
20
22
}
@@ -23,6 +25,7 @@ pub struct UnresolvedTransaction {
23
25
feature = "serde" ,
24
26
derive( serde_derive:: Serialize , serde_derive:: Deserialize )
25
27
) ]
28
+ #[ cfg_attr( feature = "schemars" , derive( schemars:: JsonSchema ) ) ]
26
29
pub struct UnresolvedProgrammableTransaction {
27
30
pub inputs : Vec < UnresolvedInputArgument > ,
28
31
pub commands : Vec < Command > ,
@@ -32,61 +35,152 @@ pub struct UnresolvedProgrammableTransaction {
32
35
feature = "serde" ,
33
36
derive( serde_derive:: Serialize , serde_derive:: Deserialize )
34
37
) ]
38
+ #[ cfg_attr( feature = "schemars" , derive( schemars:: JsonSchema ) ) ]
35
39
pub struct UnresolvedGasPayment {
36
40
pub objects : Vec < UnresolvedObjectReference > ,
37
41
pub owner : Address ,
38
42
#[ cfg_attr(
39
43
feature = "serde" ,
40
- serde( with = "crate::_serde::OptionReadableDisplay" )
44
+ serde(
45
+ with = "crate::_serde::OptionReadableDisplay" ,
46
+ default ,
47
+ skip_serializing_if = "Option::is_none" ,
48
+ )
41
49
) ]
50
+ #[ cfg_attr( feature = "schemars" , schemars( with = "Option<crate::_schemars::U64>" ) ) ]
42
51
pub price : Option < u64 > ,
43
52
#[ cfg_attr(
44
53
feature = "serde" ,
45
- serde( with = "crate::_serde::OptionReadableDisplay" )
54
+ serde(
55
+ with = "crate::_serde::OptionReadableDisplay" ,
56
+ default ,
57
+ skip_serializing_if = "Option::is_none" ,
58
+ )
46
59
) ]
60
+ #[ cfg_attr( feature = "schemars" , schemars( with = "Option<crate::_schemars::U64>" ) ) ]
47
61
pub budget : Option < u64 > ,
48
62
}
49
63
50
64
#[ cfg_attr(
51
65
feature = "serde" ,
52
66
derive( serde_derive:: Serialize , serde_derive:: Deserialize )
53
67
) ]
68
+ #[ cfg_attr( feature = "schemars" , derive( schemars:: JsonSchema ) ) ]
54
69
pub struct UnresolvedObjectReference {
55
70
pub object_id : ObjectId ,
56
71
#[ cfg_attr(
57
72
feature = "serde" ,
58
- serde( with = "crate::_serde::OptionReadableDisplay" )
73
+ serde(
74
+ with = "crate::_serde::OptionReadableDisplay" ,
75
+ default ,
76
+ skip_serializing_if = "Option::is_none" ,
77
+ )
59
78
) ]
79
+ #[ cfg_attr( feature = "schemars" , schemars( with = "Option<crate::_schemars::U64>" ) ) ]
60
80
pub version : Option < Version > ,
81
+ #[ cfg_attr( feature = "serde" , serde( skip_serializing_if = "Option::is_none" , ) ) ]
61
82
pub digest : Option < ObjectDigest > ,
62
83
}
63
84
85
+ #[ derive( Clone , Debug , PartialEq , Eq ) ]
86
+ #[ cfg_attr(
87
+ feature = "serde" ,
88
+ derive( serde_derive:: Serialize , serde_derive:: Deserialize ) ,
89
+ serde( rename_all = "snake_case" )
90
+ ) ]
91
+ #[ cfg_attr( feature = "schemars" , derive( schemars:: JsonSchema ) ) ]
92
+ pub enum UnresolvedInputArgumentKind {
93
+ Pure ,
94
+ Shared ,
95
+ Receiving ,
96
+ ImmutableOrOwned ,
97
+ Immutable ,
98
+ Owned ,
99
+ Literal ,
100
+ }
101
+
102
+ #[ derive( Clone , Debug , Default , PartialEq , Eq ) ]
64
103
#[ cfg_attr(
65
104
feature = "serde" ,
66
105
derive( serde_derive:: Serialize , serde_derive:: Deserialize )
67
106
) ]
68
- pub enum UnresolvedInputArgument {
69
- // contains no structs or objects
70
- Pure {
71
- #[ cfg_attr(
72
- feature = "serde" ,
73
- serde( with = "::serde_with::As::<::serde_with::Bytes>" )
74
- ) ]
75
- value : Vec < u8 > ,
76
- } ,
77
- // A Move object, either immutable, or owned mutable.
78
- ImmutableOrOwned ( UnresolvedObjectReference ) ,
79
- // A Move object that's shared.
80
- // SharedObject::mutable controls whether caller asks for a mutable reference to shared object.
81
- Shared {
82
- object_id : ObjectId ,
83
- #[ cfg_attr(
84
- feature = "serde" ,
85
- serde( with = "crate::_serde::OptionReadableDisplay" )
86
- ) ]
87
- initial_shared_version : Option < u64 > ,
88
- mutable : Option < bool > ,
89
- } ,
90
- // A Move object that can be received in this transaction.
91
- Receiving ( UnresolvedObjectReference ) ,
107
+ #[ cfg_attr( feature = "schemars" , derive( schemars:: JsonSchema ) ) ]
108
+ pub struct UnresolvedInputArgument {
109
+ #[ cfg_attr( feature = "serde" , serde( skip_serializing_if = "Option::is_none" , ) ) ]
110
+ pub kind : Option < UnresolvedInputArgumentKind > ,
111
+ #[ cfg_attr( feature = "serde" , serde( skip_serializing_if = "Option::is_none" , ) ) ]
112
+ pub value : Option < UnresolvedValue > ,
113
+ #[ cfg_attr( feature = "serde" , serde( skip_serializing_if = "Option::is_none" , ) ) ]
114
+ pub object_id : Option < ObjectId > ,
115
+ /// Either the `initial_shared_version` if object is a shared object, or the `version` if
116
+ /// this is an owned object
117
+ #[ cfg_attr(
118
+ feature = "serde" ,
119
+ serde(
120
+ with = "crate::_serde::OptionReadableDisplay" ,
121
+ default ,
122
+ skip_serializing_if = "Option::is_none" ,
123
+ alias = "initial_shared_version" ,
124
+ )
125
+ ) ]
126
+ #[ cfg_attr( feature = "schemars" , schemars( with = "Option<crate::_schemars::U64>" ) ) ]
127
+ pub version : Option < Version > ,
128
+ #[ cfg_attr( feature = "serde" , serde( skip_serializing_if = "Option::is_none" , ) ) ]
129
+ pub digest : Option < ObjectDigest > ,
130
+ #[ cfg_attr( feature = "serde" , serde( skip_serializing_if = "Option::is_none" , ) ) ]
131
+ pub mutable : Option < bool > ,
132
+ }
133
+
134
+ #[ derive( Clone , Debug , PartialEq , Eq ) ]
135
+ #[ cfg_attr(
136
+ feature = "serde" ,
137
+ derive( serde_derive:: Serialize , serde_derive:: Deserialize ) ,
138
+ serde( try_from = "serde_json::Value" , into = "serde_json::Value" )
139
+ ) ]
140
+ #[ cfg_attr( feature = "schemars" , derive( schemars:: JsonSchema ) ) ]
141
+ pub enum UnresolvedValue {
142
+ Null ,
143
+ Bool ( bool ) ,
144
+ Number ( u64 ) ,
145
+ String ( String ) ,
146
+ Array ( Vec < UnresolvedValue > ) ,
147
+ }
148
+
149
+ #[ cfg( feature = "serde" ) ]
150
+ #[ cfg_attr( doc_cfg, doc( cfg( feature = "serde" ) ) ) ]
151
+ impl TryFrom < serde_json:: Value > for UnresolvedValue {
152
+ type Error = & ' static str ;
153
+
154
+ fn try_from ( value : serde_json:: Value ) -> Result < Self , Self :: Error > {
155
+ let v = match value {
156
+ serde_json:: Value :: Null => Self :: Null ,
157
+ serde_json:: Value :: Bool ( b) => Self :: Bool ( b) ,
158
+ serde_json:: Value :: Number ( n) => {
159
+ Self :: Number ( n. as_u64 ( ) . ok_or ( "expected unsigned integer" ) ?)
160
+ }
161
+ serde_json:: Value :: String ( s) => Self :: String ( s) ,
162
+ serde_json:: Value :: Array ( a) => Self :: Array (
163
+ a. into_iter ( )
164
+ . map ( Self :: try_from)
165
+ . collect :: < Result < _ , _ > > ( ) ?,
166
+ ) ,
167
+ serde_json:: Value :: Object ( _) => return Err ( "objects are not supported" ) ,
168
+ } ;
169
+
170
+ Ok ( v)
171
+ }
172
+ }
173
+
174
+ #[ cfg( feature = "serde" ) ]
175
+ #[ cfg_attr( doc_cfg, doc( cfg( feature = "serde" ) ) ) ]
176
+ impl From < UnresolvedValue > for serde_json:: Value {
177
+ fn from ( value : UnresolvedValue ) -> Self {
178
+ match value {
179
+ UnresolvedValue :: Null => Self :: Null ,
180
+ UnresolvedValue :: Bool ( b) => Self :: Bool ( b) ,
181
+ UnresolvedValue :: Number ( n) => Self :: Number ( n. into ( ) ) ,
182
+ UnresolvedValue :: String ( s) => Self :: String ( s) ,
183
+ UnresolvedValue :: Array ( a) => Self :: Array ( a. into_iter ( ) . map ( Into :: into) . collect ( ) ) ,
184
+ }
185
+ }
92
186
}
0 commit comments