in sdk/keyvault/azure_security_keyvault_keys/src/resource.rs [91:121]
fn deconstruct(url: &Url) -> Result<ResourceId> {
let vault_url = format!("{}://{}", url.scheme(), url.authority(),);
let mut segments = url
.path_segments()
.ok_or_else(|| azure_core::Error::message(ErrorKind::DataConversion, "invalid url"))?
.filter(|s| !s.is_empty());
segments
.next()
.ok_or_else(|| azure_core::Error::message(ErrorKind::DataConversion, "missing collection"))
.and_then(|col| {
if col != "keys" {
return Err(azure_core::Error::message(
ErrorKind::DataConversion,
"not in keys collection",
));
}
Ok(col)
})?;
let name = segments
.next()
.ok_or_else(|| azure_core::Error::message(ErrorKind::DataConversion, "missing name"))
.map(String::from)?;
let version = segments.next().map(String::from);
Ok(ResourceId {
source_id: url.as_str().into(),
vault_url,
name,
version,
})
}