uri-pattern-matcher 0.1.4

URI (or path) pattern matching
Documentation
use crate::UriPattern;

#[derive(Debug, PartialEq, PartialOrd, Ord, Eq)]
pub(crate) struct UriPatternScore {
    score: usize,
}

impl From<&UriPattern<'_>> for UriPatternScore {
    fn from(pattern: &UriPattern) -> Self {
        let score: Vec<usize> = pattern.parts.iter().map(|part| part.into()).collect();
        let len = score.len() as u32 - 1u32;
        let score: usize = score.iter().enumerate().fold(0, |sum, (k, v)| sum + v * 10usize.pow(len - k as u32));
        UriPatternScore {score}
    }
}


#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn score_for_uri_pattern() {
        let pattern: &UriPattern = &"/a/{b}/{c}/d".into();
        let score: UriPatternScore = pattern.into();
        assert_eq!(score.score, 110);

        let pattern: &UriPattern = &"/{a}/b/c/d".into();
        let score: UriPatternScore = pattern.into();
        assert_eq!(score, UriPatternScore{ score: 1000});
    }
}