Strings e Iteradores

Neste exercício, você irá implementar um componente de roteamento de um servidor web. O servidor está configurado com um número de prefixos de caminhos que são comparados com os caminhos requisitados. Os prefixos de caminho podem conter um caractere curinga que corresponde a um segmento completo. Veja os testes unitários abaixo.

Copie o seguinte código para https://play.rust-lang.org/ e faça os testes passarem. Tente evitar alocar um Vec para seus resultados intermediários:

#![allow(unused)]
fn main() {
// TODO: remova isto quando você terminar sua implementação .
#![allow(unused_variables, dead_code)]

pub fn prefix_matches(prefix: &str, request_path: &str) -> bool {
    unimplemented!()
}

#[test]
fn test_matches_without_wildcard() {
    assert!(prefix_matches("/v1/editores", "/v1/editores"));
    assert!(prefix_matches("/v1/editores", "/v1/editores/abc-123"));
    assert!(prefix_matches("/v1/editores", "/v1/editores/abc/livros"));

    assert!(!prefix_matches("/v1/editores", "/v1"));
    assert!(!prefix_matches("/v1/editores", "/v1/editoresLivros"));
    assert!(!prefix_matches("/v1/editores", "/v1/pai/editores"));
}

#[test]
fn test_matches_with_wildcard() {
    assert!(prefix_matches(
        "/v1/editores/*/livros",
        "/v1/editores/foo/livros"
    ));
    assert!(prefix_matches(
        "/v1/editores/*/livros",
        "/v1/editores/bar/livros"
    ));
    assert!(prefix_matches(
        "/v1/editores/*/livros",
        "/v1/editores/foo/livros/livro1"
    ));

    assert!(!prefix_matches("/v1/editores/*/livros", "/v1/editores"));
    assert!(!prefix_matches(
        "/v1/editores/*/livros",
        "/v1/editores/foo/livrosPorAutor"
    ));
}
}