Skip to content

Commit f5e40d0

Browse files
committed
feat(blog): created an article about cargo-generate
1 parent 0523961 commit f5e40d0

File tree

4 files changed

+115
-0
lines changed

4 files changed

+115
-0
lines changed

articles/cargo-generate.md

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
---
2+
title: Crea tus proyectos con cargo generate
3+
description: Parametriza la creación de tus proyectos con cargo generate y liquid
4+
author: Jonathan D.
5+
github_user: jd-apprentice
6+
date: 2024-12-29
7+
tags:
8+
- rust
9+
- templates
10+
- cargo
11+
social:
12+
github: https://github.com/jd-apprentice
13+
website: https://jonathan.com.ar/
14+
---
15+
16+
## Que es cargo generate?
17+
18+
Cargo generate es una herramienta que te permite crear proyectos basados en el sistema de templates `Liquid` el mismo es similar a Jinja2.
19+
20+
El mismo utiliza un archivo llamado `cargo-generate.toml` en la raiz de tu proyecto para configurar el proyecto.
21+
22+
Un ejemplo de como se veria
23+
24+
```toml
25+
[placeholders.package_name]
26+
type = "string"
27+
prompt = "What is the name of the package?"
28+
29+
[placeholders.package_description]
30+
type = "string"
31+
prompt = "Enter a project description"
32+
```
33+
34+
## Instalación
35+
36+
Para poder usarlo tendriamos que instalarlo, podemos hacerlo con nuestro manejador de paquetes en mi caso es `pacman -S cargo-generate`.
37+
38+
Termina quedando accesible con `cargo generate` a nivel sistema
39+
40+
![cli](../assets/images/cargo-generate-cli.png)
41+
42+
## Como usarlo?
43+
44+
Ahora si quiero instalar un template que lo tengo local podria hacer
45+
46+
```shell
47+
cargo generate --path jd-rust
48+
```
49+
50+
Donde `path` es la ruta donde se encuentra el template
51+
52+
Como tambien podemos usar un repositorio remoto
53+
54+
```shell
55+
cargo generate https://github.com/jd-apprentice/jd-rust
56+
```
57+
58+
Ahora de forma interactivo es cuando nos va a preguntar para ir creando nuestro proyecto
59+
60+
![interactive](../assets/images/cargo-interactive.png)
61+
62+
Cada uno de estos valores va a ser remplazado contra un archivo que tenga la extension `.liquid` o bien va a determinar la existencia de un archivo.
63+
64+
Por ejemplo nuestro `rust-toolchain.toml.liquid` contiene lo siguiente
65+
66+
```toml
67+
[toolchain]
68+
channel = "{{ toolchain }}"
69+
profile = "default"
70+
components = ["clippy", "rustfmt"]
71+
```
72+
73+
Entonces en esta pregunta
74+
75+
```shell
76+
? 🤷 What is the rust toolchain version?
77+
❯ stable
78+
beta
79+
nightly
80+
```
81+
82+
Va a remplazar lo que yo le diga con "{{ toolchain }}" esto se llama interpolación.
83+
84+
## Ejemplo completo
85+
86+
```shell
87+
cargo generate https://github.com/jd-apprentice/jd-rust
88+
⚠️ Favorite `https://github.com/jd-apprentice/jd-rust` not found in config, using it as a git repository: https://github.com/jd-apprentice/jd-rust
89+
🤷 Project Name: blog-rust
90+
🔧 Destination: /home/dyallo/Documents/Proyectos/blog-rust ...
91+
🔧 project-name: blog-rust ...
92+
🔧 Generating template ...
93+
🤷 What is the name of the package?: blog-rust
94+
🤷 Enter a project description: Proyecto de prueba para el blog de rust
95+
✔ 🤷 Do you want to include a MIT License? · false
96+
🤷 What is your email? (CONTRIBUTING, LICENSE, etc): contacto@jonathan.com.ar
97+
🤷 What is your github username? (CODEOWNERS): jd-apprentice
98+
✔ 🤷 What is the rust toolchain version? · stable
99+
✔ 🤷 What is the category of your package? · command-line-utilities
100+
✔ 🤷 Do you want to create a github release? · false
101+
✔ 🤷 Do you want to use sentry? · false
102+
🔧 Moving generated files into: `/home/dyallo/Documents/Proyectos/blog-rust`...
103+
🔧 Initializing a fresh Git repository
104+
✨ Done! New project created /home/dyallo/Documents/Proyectos/blog-rust
105+
```
106+
107+
Esto lo que hizo fue generar el siguiente proyecto
108+
109+
![example](../assets/images/blog-rust.png)
110+
111+
## Enlaces utilizados
112+
113+
- [cargo-generate](https://github.com/cargo-generate/cargo-generate)
114+
- [jd-rust](https://github.com/jd-apprentice/jd-rust)
115+
- [liquid](https://github.com/Shopify/liquid)

assets/images/blog-rust.png

660 KB
Loading
443 KB
Loading
242 KB
Loading

0 commit comments

Comments
 (0)