Eu tenho este código:
let routes = match env::var("ENV") {
Ok(el) => {
if el == "PROD" {
routes![upload_image]
} else {
routes![get_token, callback, form, upload_image, refresh]
}
},
_ => routes![get_token, callback, form, upload_image, refresh],
};
A função env::var
retorna um Result<String, VarError>
. Eu queria saber se meu código acima poderia ser simplificado assim:
let routes = match env::var("ENV") { // E: mismatched types: this expression has type `Result<std::string::String, VarError>
Ok("PROD") => { // E: mismatched types: expected `String`, found `&str`
routes![upload_image]
},
_ => routes![get_token, callback, form, upload_image, refresh],
};
No entanto, estou recebendo um erro sobre "tipos incompatíveis: esperado String
, encontrado &str
". Existe uma maneira de simplificar esse código?
A solução provavelmente mais simples é apenas usar o fato de que
String
derefs tostr
e chamarResult::as_deref
:Você pode usar uma
if
expressão simples em vez de correspondência de padrão e usarto_string()
para construir umResult
valor diretamente comparável:(Ou use
env::var("ENV").as_deref() == Ok("PROD")
, veja a outra resposta .)Com correspondência de padrões, você também pode usar um protetor de correspondência para evitar
to_string()
eas_deref()
: