Skip to content

Commit 83516be

Browse files
fix: there was a probelm with CredentialValues this fixes it
1 parent b37f091 commit 83516be

File tree

5 files changed

+64
-25
lines changed

5 files changed

+64
-25
lines changed

uniffi/src/anoncreds.udl

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ typedef string CredentialDefinitionId;
1010
typedef string RevocationRegistryDefinitionId;
1111
[Custom]
1212
typedef string RevocationRegistryId;
13-
[Custom]
14-
typedef string CredentialValues;
1513

1614
[Error]
1715
enum AnoncredsError {
@@ -56,6 +54,15 @@ dictionary Schema {
5654
IssuerId issuer_id;
5755
};
5856

57+
dictionary CredentialValues {
58+
record<string, AttributeValues> values;
59+
};
60+
61+
dictionary AttributeValues {
62+
string raw;
63+
string encoded;
64+
};
65+
5966
dictionary CredentialDefinitionData {
6067
string primary;
6168
string? revocation;
@@ -252,7 +259,7 @@ interface Issuer {
252259
CredentialDefinitionPrivate cred_def_private,
253260
CredentialOffer cred_offer,
254261
CredentialRequest cred_request,
255-
CredentialValues cred_values,
262+
sequence<AttributeValues> cred_values,
256263
RevocationRegistryId? rev_reg_id,
257264
RevocationStatusList? rev_status_list,
258265
CredentialRevocationConfig? revocation_config

uniffi/src/issuer/mod.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ use crate::types::credential::{Credential};
55
use crate::CredentialRequest;
66
use crate::types::rev_status_list::RevocationStatusList;
77
use crate::types::rev_reg_def::{RevocationRegistryDefinition, RevocationRegistryDefinitionPrivate};
8+
use crate::custom_types::AttributeValues;
89

910
use anoncreds_core::types::CredentialRevocationConfig as AnoncredsCredentialRevocationConfig;
1011
use anoncreds_core::data_types::rev_reg::RevocationRegistryId;
1112
use anoncreds_core::data_types::rev_reg_def::RegistryType;
1213
use anoncreds_core::data_types::schema::Schema;
1314
use anoncreds_core::issuer::{create_credential, create_credential_definition, create_credential_offer, create_revocation_registry_def, create_revocation_status_list, create_schema, update_revocation_status_list, update_revocation_status_list_timestamp_only};
1415
use anoncreds_core::tails::{TailsFileWriter, TailsFileReader};
15-
use anoncreds_core::types::{AttributeNames, CredentialDefinitionConfig, CredentialValues, SignatureType};
16+
use anoncreds_core::types::{AttributeNames, CredentialValues, CredentialDefinitionConfig, SignatureType, MakeCredentialValues};
1617
use std::collections::BTreeSet;
1718
use std::iter::FromIterator;
1819
use std::sync::Arc;
@@ -184,17 +185,22 @@ impl Issuer {
184185
cred_def_private: Arc<CredentialDefinitionPrivate>,
185186
cred_offer: Arc<CredentialOffer>,
186187
cred_request: Arc<CredentialRequest>,
187-
cred_values: CredentialValues,
188+
cred_values: Vec<AttributeValues>,
188189
rev_reg_id: Option<RevocationRegistryId>,
189190
rev_status_list: Option<Arc<RevocationStatusList>>,
190191
revocation_config: Option<CredentialRevocationConfig>
191192
) -> Result<Arc<Credential>, AnoncredsError> {
193+
let mut values = MakeCredentialValues::default();
194+
for val in cred_values.iter() {
195+
values.add_raw(val.raw.to_owned(), val.encoded.to_owned()).expect("Something went wrong");
196+
}
197+
let _cred_values = CredentialValues::from(values);
192198
let credential = create_credential(
193199
&(*cred_def).core,
194200
&(*cred_def_private).core,
195201
&(*cred_offer).core,
196202
&(*cred_request).core,
197-
cred_values,
203+
_cred_values,
198204
rev_reg_id,
199205
rev_status_list.as_ref().map(|list| &(*list).core),
200206
revocation_config.as_ref().map(|config| config.to_cred_rev_config()),

uniffi/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ pub use anoncreds_core::data_types::cred_def::CredentialDefinitionId;
77
pub use anoncreds_core::data_types::issuer_id::IssuerId;
88
pub use anoncreds_core::data_types::rev_reg::RevocationRegistryId;
99
pub use anoncreds_core::data_types::rev_reg_def::RevocationRegistryDefinitionId;
10-
pub use anoncreds_core::data_types::credential::CredentialValues;
1110
pub use anoncreds_core::data_types::schema::{Schema, SchemaId};
1211
pub use anoncreds_core::types::{AttributeNames, CredentialDefinitionConfig, SignatureType, RegistryType};
1312
pub use crate::types::cred_def::{CredentialDefinition, CredentialDefinitionData, CredentialKeyCorrectnessProof};
@@ -23,6 +22,7 @@ pub use crate::types::rev_reg_def::RevocationRegistryDefinitionValuePublicKeys;
2322
pub use crate::types::rev_reg_def::RevocationRegistryDefinitionValue;
2423
pub use crate::types::rev_status_list::RevocationStatusList;
2524
pub use crate::cred_def::CredentialDefinitionPrivate;
25+
pub use crate::custom_types::{AttributeValues, CredentialValues};
2626

2727
pub use types::*;
2828
pub use issuer::CredentialRevocationConfig;

uniffi/src/types/credential.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
use crate::types::error::AnoncredsError;
22
use crate::types::nonce::Nonce;
3+
pub use crate::custom_types::CredentialValues;
34
use anoncreds_core::data_types::schema::SchemaId;
45
use anoncreds_core::data_types::cred_def::{
56
CredentialDefinitionId,
67
SignatureType
78
};
89
use anoncreds_core::data_types::rev_reg::RevocationRegistryId;
910
use anoncreds_core::data_types::credential::Credential as AnoncredsCredential;
10-
use anoncreds_core::types::CredentialValues;
1111

1212
pub struct Credential {
1313
pub core: AnoncredsCredential
@@ -32,7 +32,7 @@ impl Credential {
3232
}
3333

3434
pub fn get_values(&self) -> CredentialValues {
35-
self.core.values.clone()
35+
self.core.values.clone().into()
3636
}
3737

3838
pub fn get_signature_json(&self) -> String {

uniffi/src/types/custom_types.rs

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ use anoncreds_core::data_types::rev_reg_def::RevocationRegistryDefinitionId;
66
use anoncreds_core::data_types::cred_def::CredentialDefinitionId;
77
use anoncreds_core::types::{
88
AttributeNames,
9-
AttributeValues
9+
AttributeValues as AnoncredsAttributeValues
1010
};
11-
use anoncreds_core::data_types::credential::CredentialValues;
11+
use anoncreds_core::data_types::credential::CredentialValues as AnoncredsCredentialValues;
1212
use crate::UniffiCustomTypeConverter;
13+
use std::convert::TryFrom;
14+
use std::convert::TryInto;
1315
use std::collections::HashMap;
1416
use serde::{Deserialize, Serialize};
1517
use serde_json::Result as SerdeResult;
@@ -84,31 +86,55 @@ impl UniffiCustomTypeConverter for RevocationRegistryDefinitionId {
8486
}
8587
}
8688

87-
// /// Make sure [CredentialValues] implements [UniffiCustomTypeConverter] so that UniFFI can use it as
88-
// /// it is a Tuple Struct in Rust
89-
impl UniffiCustomTypeConverter for CredentialValues {
89+
/// Make sure [RevocationRegistryId] implements [UniffiCustomTypeConverter] so that UniFFI can use it as
90+
/// it is a Tuple Struct in Rust
91+
impl UniffiCustomTypeConverter for RevocationRegistryId {
9092
type Builtin = String;
9193

9294
fn into_custom(val: Self::Builtin) -> uniffi::Result<Self> {
93-
let json: HashMap<String, AttributeValues> = serde_json::from_str(&val).map_err(|_| AnoncredsError::ConversionError)?;
94-
Ok(CredentialValues(json))
95+
Ok(RevocationRegistryId(val))
9596
}
9697

9798
fn from_custom(obj: Self) -> Self::Builtin {
98-
serde_json::to_string(&obj.0).unwrap()
99+
obj.0
99100
}
100101
}
101102

102-
/// Make sure [RevocationRegistryId] implements [UniffiCustomTypeConverter] so that UniFFI can use it as
103-
/// it is a Tuple Struct in Rust
104-
impl UniffiCustomTypeConverter for RevocationRegistryId {
105-
type Builtin = String;
103+
pub struct CredentialValues {
104+
pub values: HashMap<String, AttributeValues>
105+
}
106106

107-
fn into_custom(val: Self::Builtin) -> uniffi::Result<Self> {
108-
Ok(RevocationRegistryId(val))
107+
impl From<AnoncredsCredentialValues> for CredentialValues {
108+
fn from(acr: AnoncredsCredentialValues) -> Self {
109+
let mapped: HashMap<String, AttributeValues> = acr.0.iter()
110+
.map(|(k, v)| (k.clone(), v.clone().into()))
111+
.collect();
112+
return CredentialValues { values: mapped }
109113
}
114+
}
110115

111-
fn from_custom(obj: Self) -> Self::Builtin {
112-
obj.0
116+
impl From<CredentialValues> for AnoncredsCredentialValues {
117+
fn from(def: CredentialValues) -> AnoncredsCredentialValues {
118+
let mapped: HashMap<String, AnoncredsAttributeValues> = def.values.into_iter()
119+
.map(|(k, v)| (k, v.into()))
120+
.collect();
121+
AnoncredsCredentialValues(mapped)
122+
}
123+
}
124+
125+
pub struct AttributeValues {
126+
pub raw: String,
127+
pub encoded: String,
128+
}
129+
130+
impl From<AnoncredsAttributeValues> for AttributeValues {
131+
fn from(acr: AnoncredsAttributeValues) -> Self {
132+
return AttributeValues { raw: acr.raw, encoded: acr.encoded }
133+
}
134+
}
135+
136+
impl From<AttributeValues> for AnoncredsAttributeValues {
137+
fn from(def: AttributeValues) -> AnoncredsAttributeValues {
138+
AnoncredsAttributeValues { raw: def.raw, encoded: def.encoded }
113139
}
114140
}

0 commit comments

Comments
 (0)