Cómo obtener metadatos de un paquete Cargo (versión, nombre, descripción) en un programa en Rust
¡Hola a todos! Estoy escribiendo una utilidad CLI en Rust y quiero que al ejecutarla con el flag `--version` se muestre la versión del programa. Pero no quiero hardcodear la cadena "0.1.0" en el código — es incómodo, la versión solo debe cambiarse en `Cargo.toml`.
Problema: no puedo entender cómo leer los datos de `Cargo.toml` desde el propio programa en Rust. Intenté usar `std::fs::read_to_string("Cargo.toml")`, pero esto solo funciona si el programa se ejecuta desde la raíz del proyecto, y después de la instalación mediante `cargo install`, el archivo `Cargo.toml` no está junto al binario.
Aquí está mi código actual, que por supuesto no funciona como debería:
```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);
}
```
Esto imprime "un