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ê estiver terminado com sua implementação. #![allow(unused_variables, dead_code)] pub fn corresponde_prefixo(prefixo: &str, caminho_requisitado: &str) -> bool { unimplemented!() } #[test] fn teste_corresponde_sem_curinga() { assert!(corresponde_prefixo("/v1/editores", "/v1/editores")); assert!(corresponde_prefixo("/v1/editores", "/v1/editores/abc-123")); assert!(corresponde_prefixo("/v1/editores", "/v1/editores/abc/livros")); assert!(!corresponde_prefixo("/v1/editores", "/v1")); assert!(!corresponde_prefixo("/v1/editores", "/v1/editoresLivros")); assert!(!corresponde_prefixo("/v1/editores", "/v1/pai/editores")); } #[test] fn teste_corresponde_com_curinga() { assert!(corresponde_prefixo( "/v1/editores/*/livros", "/v1/editores/foo/livros" )); assert!(corresponde_prefixo( "/v1/editores/*/livros", "/v1/editores/bar/livros" )); assert!(corresponde_prefixo( "/v1/editores/*/livros", "/v1/editores/foo/livros/livro1" )); assert!(!corresponde_prefixo("/v1/editores/*/livros", "/v1/editores")); assert!(!corresponde_prefixo( "/v1/editores/*/livros", "/v1/editores/foo/livrosPorAutor" )); } }