@@ -34,8 +34,30 @@ pub enum PodClass {
3434
3535// An Origin, which represents a reference to an ancestor POD.
3636#[ derive( Clone , Debug , PartialEq , Eq , h:: Hash , Default , Serialize , Deserialize ) ]
37+ #[ serde( into = "OriginSerdeHelper" , from = "OriginSerdeHelper" ) ]
3738pub struct Origin ( pub PodClass , pub PodId ) ;
3839
40+ #[ derive( Serialize , Deserialize ) ]
41+ struct OriginSerdeHelper {
42+ pod_class : PodClass ,
43+ pod_id : PodId ,
44+ }
45+
46+ impl From < Origin > for OriginSerdeHelper {
47+ fn from ( origin : Origin ) -> Self {
48+ OriginSerdeHelper {
49+ pod_class : origin. 0 ,
50+ pod_id : origin. 1 ,
51+ }
52+ }
53+ }
54+
55+ impl From < OriginSerdeHelper > for Origin {
56+ fn from ( helper : OriginSerdeHelper ) -> Self {
57+ Origin ( helper. pod_class , helper. pod_id )
58+ }
59+ }
60+
3961#[ derive( Clone , Debug , PartialEq , Eq , Serialize , Deserialize ) ]
4062pub enum Value {
4163 // Serde cares about the order of the enum variants, with untagged variants
@@ -239,6 +261,7 @@ impl SignedPod {
239261}
240262
241263#[ derive( Clone , Debug , PartialEq , Eq , h:: Hash , Serialize , Deserialize ) ]
264+ #[ serde( into = "AnchoredKeySerdeHelper" , from = "AnchoredKeySerdeHelper" ) ]
242265pub struct AnchoredKey ( pub Origin , pub String ) ;
243266
244267impl From < AnchoredKey > for middleware:: AnchoredKey {
@@ -247,6 +270,32 @@ impl From<AnchoredKey> for middleware::AnchoredKey {
247270 }
248271}
249272
273+ // Tuple structs get serialized to bare JSON arrays, which is not very
274+ // user-friendly. This helper struct allows us to serialize AnchoredKeys
275+ // into a structure with named fields.
276+ #[ derive( Serialize , Deserialize ) ]
277+ struct AnchoredKeySerdeHelper {
278+ origin : Origin ,
279+ key : String ,
280+ }
281+
282+ // Convert from AnchoredKey to the helper for serialization
283+ impl From < AnchoredKey > for AnchoredKeySerdeHelper {
284+ fn from ( ak : AnchoredKey ) -> Self {
285+ AnchoredKeySerdeHelper {
286+ origin : ak. 0 ,
287+ key : ak. 1 ,
288+ }
289+ }
290+ }
291+
292+ // Convert from the helper back to AnchoredKey for deserialization
293+ impl From < AnchoredKeySerdeHelper > for AnchoredKey {
294+ fn from ( helper : AnchoredKeySerdeHelper ) -> Self {
295+ AnchoredKey ( helper. origin , helper. key )
296+ }
297+ }
298+
250299#[ derive( Debug ) ]
251300pub struct MainPodBuilder {
252301 pub params : Params ,
0 commit comments