Bienvenidos sean a este post, hoy veremos como crear nuestro «espacio de trabajo».
Al igual que en otros lenguajes, podemos establecer un workspace (espacio de trabajo) donde podemos establecer que trabajarán bajo el ala de este. Esto está pensado principalmente cuando nuestros proyectos comienzan a tomar dimensiones muy grandes. Porque nos permite tener un código en crates separados para manejar de una mejor manera su complejidad. Al trabajar de esta manera, también nos permite crear crates localmente, compartir el mismo Cargo.lock y el mismo directorio de salida.
Para entender este concepto, vamos a generar un ejemplo básico para analizar como crearlo. Primero creen un directorio y dentrro de este generen un archivo con el nombre de Cargo.toml y agreguen el siguiente código:
Cargo.toml
[workspace]members = ["mi_crate","app"]resolver = "1"
Establecemos la etiqueta workspace y luego seguido por dos propiedades. La primera es para indicar cuales son los miembros integrantes del espacio de trabajo. La segunda es para indicar que resolvedor de workspace debe usar. Si le pasamos el valor de 1, utiliza el actual en el lenguaje pero si necesitan el utilizado hasta 2024 deben usar el valor de 3.
Tenemos dos miembros, por los nombres tenemos un crate y una aplicación. Nuestro siguiente paso será crear a ambos y para ello tenemos dos opciones: creamos los directorios y archivos completamente a mano o usamos a cargo para crearlo. Yo voy a optar por la segunda opción.
Nota:
No se preocupen por los avisos y errores que devuelve cargo porque los solucionaremos con las modificaciones.
Dentro del directorio que creamos vamos a ejecutar el siguiente comando:
$ cargo new mi_crate --lib
Este genera nuestro crate, lo siguiente es ir a lib.rs en el directorio src del nuevo proyecto y modificar el código existente de la siguiente manera:
src/lib.rs
pub fn saludar() { println!("Holis");}
Para simplificar este tema, solo vamos a tener una función que nos devuelve un mensaje en la consola. Tiene la particularidad de ser pública para ser accedida desde cualquier otro proyecto. Es la única modificación que debemos realizar.
Nuestro siguiente paso es crear a la aplicación, para ello en el directorio raíz del workspace ejecuten el siguiente comando:
$ cargo new app
Esto va a generar nuestro proyecto que es la aplicación que ejecutaremos. Lo siguiente es ir a main.rs del directorio src y modificaremos su código existente de la siguiente manera:
src/main.rs
fn main() { mi_crate::saludar();}
En este simplemente hacemos un llamado de la función en el crate. Un código simple para solo verificar como fuuciona. Aunque esto no termina acá, nuestro siguiente paso es modificar el código existente en Cargo.toml de la aplicación de la siguiente manera:
Cargo.toml
[package]name = "app"version = "0.1.0"edition = "2024"[dependencies]mi_crate = { path = "../mi_crate" }
En realidad, la única modificación a realizar es en dependencies. Agregamos al crate que generamos anteriormente. Simplemente aplican el nombre y luego mediante la propiedad path asignaremos su ubicación. Con esto ya tenemos todo lo necesario para verificar nuestro proyecto pero antes veamos como quedó su estructura:
.├── app│ ├── Cargo.toml│ └── src│ └── main.rs├── Cargo.lock├── Cargo.toml└── mi_crate ├── Cargo.toml └── src └── lib.rs
Como pueden ver, todos los proyectos deben estar en el directtorio del workspace. En el directorio raíz del workspace ejecuten el comando de cargo para compilarlo. Si no devuelve ninguna falla, podemos pasar a ejecutarlo y debemos tener la siguiente salida:
$ cargo run Compiling mi_crate v0.1.0 (/home/tinchicus/lenguajes/rust/blog/01/espacio/mi_crate) Compiling app v0.1.0 (/home/tinchicus/lenguajes/rust/blog/01/espacio/app) Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.38s Running `target/debug/app`Holis$
Como pueden observar, podemos tener múltiples recursos en un mismo lugar. Como mencionamos al inicio, facilitando el manejo de los mismos a la hora de administrarlos y depurarlos.
En resumen, hoy hemos visto a cargo workspace, que es, para que sirve, como se utiliza y un ejemplo práctico para ver como aplicarlo. Espero les haya sido de utilidad y les dejo un link a GitHub donde estan los codigos creados hoy:
https://github.com/tinchicus/RUST-codes/tree/main/cargo%20workspace
Les dejo algunas de mis redes sociales para seguirme o recibir una notificacion cada vez que subo un nuevo post:


Donación
Es para mantenimento del sitio, gracias!
$1.50





