in content-addressed-cache/src/local_cache.rs [86:107]
fn from_str(s: &str) -> Result<Self, Self::Err> {
let mut ix: usize = 0;
if s.len() != HEX_ENCODED_COMPOSITE_KEY_LENGTH {
return Err(ParseCompositeKeyError::NoMatch);
};
let kind_vec = match hex::decode(&s[ix..ix + (KIND_BYTE_LENGTH * 2)]) {
Ok(oid) => oid,
Err(_) => return Err(ParseCompositeKeyError::MissingFunctionIdentifier),
};
ix += KIND_BYTE_LENGTH * 2;
if &s[ix..ix + 1] != DELIMITER {
return Err(ParseCompositeKeyError::MissingDelimiter);
}
ix += 1;
let key = match CacheKey::from_str(&s[ix..ix + (KEY_BYTE_LENGTH * 2)]) {
Ok(oid) => oid,
Err(_) => return Err(ParseCompositeKeyError::MissingArgument),
};
let mut kind = [0; 2];
kind.copy_from_slice(&kind_vec[..2]);
Ok(CompositeKey { kind, key })
}