fn deconstruct()

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,
    })
}