Avatar ·

Cómo obtener metadatos de un paquete Cargo (versión, nombre, descripción) en un programa Rust

¡Hola a todos! Estoy empezando a aprender Rust y estoy escribiendo una pequeña utilidad de línea de comandos. Quiero que al ejecutarse con el flag `--version`, el programa muestre no solo el número de versión, sino, por ejemplo: "MyApp v0.2.1 (2024-05-20)". El problema es que no quiero hardcodear la versión en el código, ya que está especificada en el archivo `Cargo.toml`. ¿Cómo puedo extraer esta información correctamente durante la compilación o ejecución? Intenté leer el archivo `Cargo.toml` directamente, pero parece una solución poco elegante, y además en una compilación de release el archivo podría no estar presente. He oído sobre la macro `env!()`, pero no entiendo cómo vincularla con Cargo. Aquí hay un ejemplo de mi estructura actual: ```rust fn main() { // ¿Cómo obtener la version desde Cargo.toml? println!("MyApp v{}", get_version()); } ``` Necesito obtener: el nombre del paquete, la versión, la descripción, los autores y, posiblemente, el hash del commit de git. ¿Alguien me puede indicar cómo hacerlo de manera correcta e idiomática en Rust? ¿Existen crates ya preparados o herramientas integradas? ¡Gracias de antemano!