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