fn from_str()

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