Como obter metadados do pacote Cargo (versão, nome, descrição) em um programa Rust?
Olá a todos! Estou começando a aprender Rust e escrevendo uma pequena utilidade de linha de comando. Quero que, ao executar com a flag `--version`, o programa exiba não apenas o número da versão, mas, por exemplo: "MyApp v0.2.1 (2024-05-20)".
O problema é que não quero hardcodar a versão no código — isso não é correto, já que ela está especificada no arquivo `Cargo.toml`. Como extrair essa informação corretamente durante a compilação ou execução?
Tentei ler o arquivo `Cargo.toml` diretamente, mas parece uma gambiarra, e na build de release o arquivo pode não estar presente. Ouvi falar da macro `env!()`, mas não entendo como vinculá-la ao Cargo.
Aqui está um exemplo da minha estrutura atual:
```rust
fn main() {
// Como obter a version do Cargo.toml?
println!("MyApp v{}", get_version());
}
```
Preciso obter: nome do pacote, versão, descrição, autores e, possivelmente, o hash do commit git. Digam-me como fazer isso de forma correta e idiomática para Rust? Quais crates prontas ou ferramentas embutidas existem? Desde já, obrigado!