Skip to content

Commit f207de2

Browse files
committed
Correcting functions to exclude network from schema and cred_def ids
Signed-off-by: artem.ivanov <[email protected]>
1 parent 84013f6 commit f207de2

File tree

4 files changed

+85
-5
lines changed

4 files changed

+85
-5
lines changed

vdr/src/contracts/anoncreds/types/credential_definition.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,8 @@ pub mod test {
153153
};
154154
use serde_json::json;
155155

156-
pub const _CREDENTIAL_DEFINITION_ID: &str = "did:ethr:testnet:0xf0e2db6c8dc6c681bb5d6ad121a107f300e9b2b5/anoncreds/v0/CLAIM_DEF/did:ethr:testnet:0xf0e2db6c8dc6c681bb5d6ad121a107f300e9b2b5/anoncreds/v0/SCHEMA/F1DClaFEzi3t/1.0.0/default";
156+
pub const CREDENTIAL_DEFINITION_ID: &str = "did:ethr:testnet:0xf0e2db6c8dc6c681bb5d6ad121a107f300e9b2b5/anoncreds/v0/CLAIM_DEF/did:ethr:testnet:0xf0e2db6c8dc6c681bb5d6ad121a107f300e9b2b5:F1DClaFEzi3t:1.0.0/default";
157+
pub const CREDENTIAL_DEFINITION_ID_WITHOUT_NETWORK: &str = "did:ethr:0xf0e2db6c8dc6c681bb5d6ad121a107f300e9b2b5/anoncreds/v0/CLAIM_DEF/did:ethr:0xf0e2db6c8dc6c681bb5d6ad121a107f300e9b2b5:F1DClaFEzi3t:1.0.0/default";
157158
pub const CREDENTIAL_DEFINITION_TAG: &str = "default";
158159

159160
pub fn credential_definition_value() -> serde_json::Value {

vdr/src/contracts/anoncreds/types/credential_definition_id.rs

+65-2
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,74 @@ impl TryFrom<&CredentialDefinitionId> for ParsedCredentialDefinitionId {
8989
}
9090
let issuer_id = DID::from(parts[0]);
9191
let parsed_issuer_id = ParsedDid::try_from(&issuer_id)?;
92+
let parsed_schema_id = ParsedCredentialDefinitionSchemaId::try_from(parts[4])?;
9293
Ok(ParsedCredentialDefinitionId {
9394
issuer_id: DID::from(parts[0]),
94-
schema_id: parts[3].to_string(),
95-
tag: parts[4].to_string(),
95+
schema_id: parsed_schema_id.as_short_id()?,
96+
tag: parts[5].to_string(),
9697
network: parsed_issuer_id.network,
9798
})
9899
}
99100
}
101+
102+
#[derive(Debug, Default, Clone, PartialEq, Deserialize, Serialize)]
103+
pub(crate) struct ParsedCredentialDefinitionSchemaId {
104+
pub(crate) issuer_id: DID,
105+
pub(crate) name: String,
106+
pub(crate) version: String,
107+
pub(crate) network: Option<String>,
108+
}
109+
110+
impl ParsedCredentialDefinitionSchemaId {
111+
pub(crate) fn as_short_id(&self) -> VdrResult<String> {
112+
Ok(
113+
format!(
114+
"{}:{}:{}",
115+
self.issuer_id.without_network()?.as_ref(),
116+
self.name,
117+
self.version
118+
)
119+
)
120+
}
121+
}
122+
123+
impl TryFrom<&str> for ParsedCredentialDefinitionSchemaId {
124+
type Error = VdrError;
125+
126+
fn try_from(schema_id: &str) -> Result<Self, Self::Error> {
127+
let parts = schema_id.split(':').collect::<Vec<&str>>();
128+
if parts.len() == 6 {
129+
return Ok(ParsedCredentialDefinitionSchemaId {
130+
issuer_id: DID::build(parts[1], None, parts[3]),
131+
name: parts[4].to_string(),
132+
version: parts[5].to_string(),
133+
network: Some(parts[2].to_string()),
134+
})
135+
}
136+
if parts.len() == 5 {
137+
return Ok(ParsedCredentialDefinitionSchemaId {
138+
issuer_id: DID::build(parts[1], None, parts[2]),
139+
name: parts[3].to_string(),
140+
version: parts[4].to_string(),
141+
network: None,
142+
})
143+
}
144+
return Err(VdrError::CommonInvalidData(
145+
"Invalid credential definition id provided".to_string(),
146+
));
147+
}
148+
}
149+
150+
#[cfg(test)]
151+
pub mod test {
152+
use crate::contracts::anoncreds::types::credential_definition::test::{CREDENTIAL_DEFINITION_ID, CREDENTIAL_DEFINITION_ID_WITHOUT_NETWORK};
153+
use super::*;
154+
155+
#[test]
156+
fn cred_def_id_id_without_network() {
157+
assert_eq!(
158+
CredentialDefinitionId::from(CREDENTIAL_DEFINITION_ID_WITHOUT_NETWORK),
159+
CredentialDefinitionId::from(CREDENTIAL_DEFINITION_ID).without_network().unwrap()
160+
)
161+
}
162+
}

vdr/src/contracts/anoncreds/types/schema.rs

+2
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ pub mod test {
149149

150150
pub const SCHEMA_ID: &str =
151151
"did:ethr:testnet:0xf0e2db6c8dc6c681bb5d6ad121a107f300e9b2b5/anoncreds/v0/SCHEMA/F1DClaFEzi3t/1.0.0";
152+
pub const SCHEMA_ID_WITHOUT_NETWORK: &str =
153+
"did:ethr:0xf0e2db6c8dc6c681bb5d6ad121a107f300e9b2b5/anoncreds/v0/SCHEMA/F1DClaFEzi3t/1.0.0";
152154
pub const SCHEMA_NAME: &str = "F1DClaFEzi3t";
153155
pub const SCHEMA_VERSION: &str = "1.0.0";
154156
pub const SCHEMA_ATTRIBUTE_FIRST_NAME: &str = "First Name";

vdr/src/contracts/anoncreds/types/schema_id.rs

+16-2
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,23 @@ impl TryFrom<&SchemaId> for ParsedSchemaId {
9797
let parsed_issuer_id = ParsedDid::try_from(&issuer_id)?;
9898
Ok(ParsedSchemaId {
9999
issuer_id: DID::from(parts[0]),
100-
name: parts[3].to_string(),
101-
version: parts[4].to_string(),
100+
name: parts[4].to_string(),
101+
version: parts[5].to_string(),
102102
network: parsed_issuer_id.network,
103103
})
104104
}
105105
}
106+
107+
#[cfg(test)]
108+
pub mod test {
109+
use crate::contracts::anoncreds::types::schema::test::{SCHEMA_ID, SCHEMA_ID_WITHOUT_NETWORK};
110+
use super::*;
111+
112+
#[test]
113+
fn schema_id_without_network() {
114+
assert_eq!(
115+
SchemaId::from(SCHEMA_ID_WITHOUT_NETWORK),
116+
SchemaId::from(SCHEMA_ID).without_network().unwrap()
117+
)
118+
}
119+
}

0 commit comments

Comments
 (0)