@@ -16,18 +16,25 @@ use role_data::RoleData;
1616use strum_macros:: FromRepr ;
1717
1818use super :: types:: cert_key_hash:: CertKeyHash ;
19- use crate :: utils:: decode_helper:: {
20- decode_any, decode_array_len, decode_bytes, decode_helper, decode_map_len,
19+ use crate :: {
20+ cardano:: cip509:: utils:: Cip0134UriSet ,
21+ utils:: decode_helper:: {
22+ decode_any, decode_array_len, decode_bytes, decode_helper, decode_map_len,
23+ } ,
2124} ;
2225
2326/// Cip509 RBAC metadata.
2427#[ derive( Debug , PartialEq , Clone , Default ) ]
2528pub struct Cip509RbacMetadata {
29+ // TODO: FIXME: Discuss if we need `Option<Vec>`.
2630 /// Optional list of x509 certificates.
31+ // TODO: FIXME: Parse X509DerCert?..
2732 pub x509_certs : Option < Vec < X509DerCert > > ,
2833 /// Optional list of c509 certificates.
2934 /// The value can be either the c509 certificate or c509 metadatum reference.
3035 pub c509_certs : Option < Vec < C509Cert > > ,
36+ // TODO: FIXME:
37+ pub fixme : Cip0134UriSet ,
3138 /// Optional list of Public keys.
3239 pub pub_keys : Option < Vec < SimplePublicKeyType > > ,
3340 /// Optional list of revocation list.
@@ -60,74 +67,35 @@ pub enum Cip509RbacMetadataInt {
6067 RoleSet = 100 ,
6168}
6269
63- impl Cip509RbacMetadata {
64- /// Create a new instance of `Cip509RbacMetadata`.
65- pub ( crate ) fn new ( ) -> Self {
66- Self {
67- x509_certs : None ,
68- c509_certs : None ,
69- pub_keys : None ,
70- revocation_list : None ,
71- role_set : None ,
72- purpose_key_data : HashMap :: new ( ) ,
73- }
74- }
75-
76- /// Set the x509 certificates.
77- fn set_x509_certs ( & mut self , x509_certs : Vec < X509DerCert > ) {
78- self . x509_certs = Some ( x509_certs) ;
79- }
80-
81- /// Set the c509 certificates.
82- fn set_c509_certs ( & mut self , c509_certs : Vec < C509Cert > ) {
83- self . c509_certs = Some ( c509_certs) ;
84- }
85-
86- /// Set the public keys.
87- fn set_pub_keys ( & mut self , pub_keys : Vec < SimplePublicKeyType > ) {
88- self . pub_keys = Some ( pub_keys) ;
89- }
90-
91- /// Set the revocation list.
92- fn set_revocation_list ( & mut self , revocation_list : Vec < CertKeyHash > ) {
93- self . revocation_list = Some ( revocation_list) ;
94- }
95-
96- /// Set the role data set.
97- fn set_role_set ( & mut self , role_set : Vec < RoleData > ) {
98- self . role_set = Some ( role_set) ;
99- }
100- }
101-
10270impl Decode < ' _ , ( ) > for Cip509RbacMetadata {
10371 fn decode ( d : & mut Decoder , ctx : & mut ( ) ) -> Result < Self , decode:: Error > {
10472 let map_len = decode_map_len ( d, "Cip509RbacMetadata" ) ?;
10573
106- let mut x509_rbac_metadata = Cip509RbacMetadata :: new ( ) ;
74+ let mut x509_rbac_metadata = Cip509RbacMetadata :: default ( ) ;
10775
10876 for _ in 0 ..map_len {
10977 let key: u16 = decode_helper ( d, "key in Cip509RbacMetadata" , ctx) ?;
11078 if let Some ( key) = Cip509RbacMetadataInt :: from_repr ( key) {
11179 match key {
11280 Cip509RbacMetadataInt :: X509Certs => {
11381 let x509_certs = decode_array_rbac ( d, "x509 certificate" ) ?;
114- x509_rbac_metadata. set_x509_certs ( x509_certs) ;
82+ x509_rbac_metadata. x509_certs = Some ( x509_certs) ;
11583 } ,
11684 Cip509RbacMetadataInt :: C509Certs => {
11785 let c509_certs = decode_array_rbac ( d, "c509 certificate" ) ?;
118- x509_rbac_metadata. set_c509_certs ( c509_certs) ;
86+ x509_rbac_metadata. c509_certs = Some ( c509_certs) ;
11987 } ,
12088 Cip509RbacMetadataInt :: PubKeys => {
12189 let pub_keys = decode_array_rbac ( d, "public keys" ) ?;
122- x509_rbac_metadata. set_pub_keys ( pub_keys) ;
90+ x509_rbac_metadata. pub_keys = Some ( pub_keys) ;
12391 } ,
12492 Cip509RbacMetadataInt :: RevocationList => {
12593 let revocation_list = decode_revocation_list ( d) ?;
126- x509_rbac_metadata. set_revocation_list ( revocation_list) ;
94+ x509_rbac_metadata. revocation_list = Some ( revocation_list) ;
12795 } ,
12896 Cip509RbacMetadataInt :: RoleSet => {
12997 let role_set = decode_array_rbac ( d, "role set" ) ?;
130- x509_rbac_metadata. set_role_set ( role_set) ;
98+ x509_rbac_metadata. role_set = Some ( role_set) ;
13199 } ,
132100 }
133101 } else {
@@ -139,6 +107,9 @@ impl Decode<'_, ()> for Cip509RbacMetadata {
139107 . insert ( key, decode_any ( d, "purpose key" ) ?) ;
140108 }
141109 }
110+
111+ // TODO: FIXME:
112+ x509_rbac_metadata. fixme = Cip0134UriSet :: new ( ) ;
142113 Ok ( x509_rbac_metadata)
143114 }
144115}
0 commit comments