Como obter metadados do pacote Cargo (versão, nome, descrição) em um programa Rust?
Olá a todos! Estou escrevendo um utilitário CLI em Rust e quero que, ao executar com a flag `--version`, a versão do programa seja exibida. Mas não quero hardcodar a string "0.1.0" no código — isso é inconveniente, a versão deve ser alterada apenas no `Cargo.toml`.
Problema: não consigo entender como ler os dados do `Cargo.toml` a partir do próprio programa Rust. Tentei usar `std::fs::read_to_string("Cargo.toml")`, mas isso só funciona se o programa for executado a partir da raiz do projeto; após a instalação via `cargo install`, o arquivo `Cargo.toml` não fica ao lado do binário.
Aqui está meu código atual, que obviamente não funciona como deveria:
```rust
fn main() {
let version = std::fs::read_to_string("Cargo.toml")
.ok()
.and_then(|s| {
s.lines()
.find(|l| l.starts_with("version"))
.map(|l| l.trim().trim_start_matches("version = \"").trim_end_matches('"'))
})
.unwrap_or("unknown");
println!("MyApp v{}", version);
}
```
Ele exibe "un