Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ jobs:
run: |
test -f docs/book/dist/firefly-rust-by-example.pdf
test -f docs/book/dist/firefly-rust-by-example.epub
test -f docs/book/dist/firefly-rust-by-example-es.pdf
test -f docs/book/dist/firefly-rust-by-example-es.epub

- name: publish GitHub release
uses: softprops/action-gh-release@v2
Expand All @@ -62,3 +64,5 @@ jobs:
files: |
docs/book/dist/firefly-rust-by-example.pdf
docs/book/dist/firefly-rust-by-example.epub
docs/book/dist/firefly-rust-by-example-es.pdf
docs/book/dist/firefly-rust-by-example-es.epub
191 changes: 191 additions & 0 deletions docs/book/book-es.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
# Edición en español (ES) — misma estructura que book.yaml; arte/openers compartidos.
# Construir con: BOOK_CONFIG=book-es.yaml bash docs/book/build-book.sh
title: Firefly para Rust con Ejemplos
subtitle: Microservicios reactivos y orientados a eventos con el framework Firefly
author: Firefly Software Foundation
publisher: Firefly Software Foundation
language: es
identifier: urn:uuid:5b2e9c70-1a4d-4f88-bc31-7e0a6d2f9c14
rights: Copyright (c) 2026 Firefly Software Foundation. Licensed under Apache-2.0.
cover_svg: art/cover.svg
trim_width: 7.5in
trim_height: 9.25in
src_dir: src-es
front:
- id: title
file: 00-front/00-title.md
nav: false
- id: copyright
file: 00-front/00-copyright.md
nav: false
- id: dedication
file: 00-front/00-dedication.md
nav: false
- id: preface
file: 00-front/00-preface.md
title: Prefacio
- id: conventions
file: 00-front/00-conventions.md
title: Convenciones
- id: primer
file: 00-front/00-rust-primer.md
title: Iniciación a Rust
parts:
- title: Parte I — Fundamentos
chapters:
- id: ch01
file: 01-why-firefly.md
num: 1
title: ¿Por qué Firefly para Rust?
opener: art/openers/ch01.svg
- id: ch02
file: 02-quickstart.md
num: 2
title: 'Inicio rápido: de cero a un servicio en marcha'
opener: art/openers/ch02.svg
- id: ch03
file: 03-configuration.md
num: 3
title: Configuración, perfiles y secretos
opener: art/openers/ch03.svg
- id: ch04
file: 04a-dependency-injection.md
num: 4
title: Inyección de dependencias y el contexto de aplicación
opener: art/openers/ch04.svg
- id: ch05
file: 04-dependency-wiring.md
num: 5
title: Cableado de dependencias y composición
opener: art/openers/ch05.svg
- id: ch04b
file: 04b-bootstrap.md
num: 6
title: Arranque de la aplicación
opener: art/openers/ch04b.svg
- id: ch06
file: 05-reactive-model.md
num: 7
title: El modelo reactivo — Mono y Flux
opener: art/openers/ch06.svg
- title: Parte II — Modelar y persistir el dominio
chapters:
- id: ch07
file: 06-first-http-api.md
num: 8
title: Tu primera API HTTP
opener: art/openers/ch07.svg
- id: ch06a
file: 06a-openapi.md
num: 9
title: OpenAPI y documentación de la API
opener: art/openers/ch06a.svg
- id: ch08
file: 07-persistence.md
num: 10
title: Persistencia y repositorios reactivos
opener: art/openers/ch08.svg
- id: ch09
file: 08-domain-driven-design.md
num: 11
title: Diseño guiado por el dominio
opener: art/openers/ch09.svg
- id: ch10
file: 09-cqrs.md
num: 12
title: 'CQRS: comandos y consultas'
opener: art/openers/ch10.svg
- title: Parte III — Arquitectura orientada a eventos
chapters:
- id: ch11
file: 10-eda-messaging.md
num: 13
title: Arquitectura orientada a eventos y mensajería
opener: art/openers/ch11.svg
- id: ch12
file: 11-event-sourcing.md
num: 14
title: Event sourcing del libro mayor
opener: art/openers/ch12.svg
- title: Parte IV — Hacia los microservicios
chapters:
- id: ch13
file: 13-http-clients.md
num: 15
title: Clientes HTTP y llamadas a otros servicios
opener: art/openers/ch13.svg
- id: ch14
file: 20a-experience-tier.md
num: 16
title: 'La capa de experiencia: componer un BFF'
opener: art/openers/ch14.svg
- id: ch15
file: 12-sagas.md
num: 17
title: 'Transacciones distribuidas: sagas, workflows y TCC'
opener: art/openers/ch15.svg
- id: ch22b
file: 22-layered-microservices.md
num: 18
title: Microservicios por capas
opener: art/openers/ch22b.svg
- title: Parte V — Asegurar, observar y desplegar
chapters:
- id: ch16
file: 14-security.md
num: 19
title: Seguridad, sesiones e identidad
opener: art/openers/ch16.svg
- id: ch17
file: 15-observability.md
num: 20
title: Observabilidad y salud
opener: art/openers/ch17.svg
- id: ch18
file: 17-caching.md
num: 21
title: Caché y resiliencia
opener: art/openers/ch18.svg
- id: ch19
file: 16-scheduling-notifications.md
num: 22
title: Tareas programadas, notificaciones y webhooks
opener: art/openers/ch19.svg
- id: ch20
file: 21-declarative-macros.md
num: 23
title: Servicios declarativos con macros
opener: art/openers/ch20.svg
- id: ch21
file: 18-testing.md
num: 24
title: Pruebas de aplicaciones Firefly
opener: art/openers/ch21.svg
- id: ch22
file: 19-cli.md
num: 25
title: La CLI de firefly
opener: art/openers/ch22.svg
- id: ch23
file: 20-production.md
num: 26
title: Extender Firefly y llevarlo a producción
opener: art/openers/ch23.svg
- title: Apéndices
chapters:
- id: appb
file: 91-appendix-modules.md
num: A
title: Índice de crates y módulos
opener: art/openers/appb.svg
- id: glossary
file: 92-glossary.md
num: ''
title: Glosario
back: []
pdf_name: firefly-rust-by-example-es.pdf
epub_name: firefly-rust-by-example-es.epub
labels:
chapter: Capítulo
appendix: Apéndice
contents: Contenido
Binary file added docs/book/dist/firefly-rust-by-example-es.epub
Binary file not shown.
Binary file added docs/book/dist/firefly-rust-by-example-es.pdf
Binary file not shown.
78 changes: 78 additions & 0 deletions docs/book/src-es/00-front/00-conventions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
## Convenciones

Esta página explica las convenciones tipográficas y estructurales que se usan a lo largo del libro, y demuestra cada una con un ejemplo real, de modo que la primera vez que te encuentres con un aviso o con un pie de código en un capítulo ya te resulte familiar.

### Listados de código

Cada ejemplo de código de varias líneas es Rust real y compilable, extraído del crate complementario Lumen. Cuando resulta útil, un listado se introduce con el **fichero en el que vive** para que puedas localizarlo en `samples/lumen`, como en "`samples/lumen/src/money.rs`". Las referencias a código en línea dentro de la prosa usan `monospace`, como en "el atributo `#[rest_controller]` genera el router del monedero."

He aquí un listado representativo: el constructor y el núcleo de aritmética exacta del objeto de valor `Money` de Lumen, copiado literalmente de `samples/lumen/src/money.rs`:

```rust
/// An exact monetary amount, expressed in integer minor units (cents).
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(transparent)]
pub struct Money {
cents: i64,
}

impl Money {
/// A zero amount — the opening balance of a brand-new wallet.
pub const ZERO: Money = Money { cents: 0 };

/// Returns a new `Money` that is `self + other` (immutable addition).
#[must_use]
pub const fn add(self, other: Money) -> Money {
Money { cents: self.cents + other.cents }
}
}
```

Un fragmento anotado con `rust,ignore` o `rust,no_run` omite la configuración circundante para ganar foco, pero los nombres de la API, los tipos y las firmas de los métodos son exactamente lo que exponen los crates. Un listado delimitado como `text` simple es salida de la shell, un banner o un intercambio HTTP en lugar de código fuente Rust:

```text
$ cargo run -p firefly-sample-lumen
:: lumen :: digital-wallet & ledger (v26.6.24)
```

### El recordatorio de la dependencia única

Como la propiedad que define a Lumen es su única dependencia de Firefly, cada tipo del framework que veas se alcanza a través de la fachada — `firefly::cqrs::Bus`, `firefly::eventsourcing::EventStore`, `firefly::reactive::Flux` — o, para la superficie de alta frecuencia y cada macro, a través de un único glob:

```rust
use firefly::prelude::*;
```

Cuando un capítulo introduce un tipo nuevo del framework, la prosa nombra la ruta de la fachada tras la que vive, de modo que siempre sepas que llegó a través de esa única dependencia.

### Avisos

A lo largo del cuerpo del texto aparecen cuatro estilos de aviso. Cada uno es una cita en bloque que se abre con una etiqueta en negrita, y el tema de diseño les da un estilo diferenciado:

> **Note.** Las notas aportan contexto complementario o aclaran una sutileza del texto principal. Vale la pena leerlas, pero no son bloqueantes.

> **Tip.** Los consejos comparten un atajo, un idiom o una buena práctica que te ahorrará tiempo en proyectos reales; por ejemplo, mantener el dinero en céntimos enteros para que la deriva de coma flotante nunca pueda corromper un saldo.

> **Warning.** Las advertencias señalan un error común o una arista afilada que provoca problemas difíciles de depurar si se ignora; por ejemplo, que los manejadores CQRS de función libre de Lumen publican a sus colaboradores a través de un `OnceLock` global del proceso, de modo que un segundo arranque de `build_router()` en el mismo binario de prueba conserva el *primer* cableado.

> **Design note.** Los avisos de nota de diseño explican *por qué* Firefly hace algo de una manera concreta y señalan dónde una idea te resultará familiar si antes has usado un framework opinionado con todo incluido o una biblioteca de reactive-streams. Son orientación, planteada como las propias decisiones de diseño de Firefly, no una tabla de traducción para otro framework. Te encontrarás con ellos en casi todos los capítulos.

### Tablas de referencia

Cuando un capítulo introduce una familia de APIs relacionadas, una tabla de referencia las reúne en un solo lugar para que puedas asimilar toda la superficie de un vistazo:

| Atributo declarativo | Lo que genera |
|---|---|
| `#[rest_controller]` | un router de axum a partir de los métodos manejadores anotados |
| `#[event_listener]` | una suscripción al broker ligada a un tipo de evento |
| `#[scheduled]` | una tarea registrada en el planificador |
| `#[saga]` / `Step` | una transacción distribuida orquestada y compensable |

### Resumen y ejercicios

Cada capítulo se cierra con dos secciones fijas:

- Un **Resumen — qué cambió en Lumen** que enumera los ficheros añadidos o ampliados y la recompensa de una sola frase: "al terminar este capítulo, Lumen puede …".
- Un conjunto de **Ejercicios** que dan un paso más allá: por lo general, una extensión pequeña y autocontenida del código que el capítulo acaba de entregar. Son opcionales pero recomendables para cualquier cosa que pienses aplicar de inmediato.

Pasa la página a [Por qué Firefly para Rust](../01-why-firefly.md), donde comienza el viaje de Lumen.
13 changes: 13 additions & 0 deletions docs/book/src-es/00-front/00-copyright.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Copyright © 2026 Firefly Software Foundation.

Licencia otorgada bajo la Licencia Apache, Versión 2.0 (la "Licencia"); no puede utilizar este material salvo en cumplimiento de la Licencia. Puede obtener una copia de la Licencia en <https://www.apache.org/licenses/LICENSE-2.0>.

Salvo que la legislación aplicable lo exija o se acuerde por escrito, el software y la documentación distribuidos bajo la Licencia se distribuyen "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulte la Licencia para conocer el régimen específico de permisos y limitaciones que rige bajo la Licencia.

---

**Primera edición, 2026.**

Todos los listados de código de este libro se escribieron y verificaron con el framework Firefly para Rust, versión 26.6.x, dirigido a Rust 1.88+ sobre la pila `tokio` + `axum`.

Publicado por la Firefly Software Foundation.
12 changes: 12 additions & 0 deletions docs/book/src-es/00-front/00-dedication.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Para **Ángel Luis Mula**, nuestro CIO —

quien preguntó, en cada standup, en cada revisión de roadmap y en al menos un
ascensor, «y… ¿cuándo hacemos la versión en Rust?» — hasta que, por fin, la hicimos.

De parte del equipo que mantiene los sistemas en marcha: gracias por un stack sin
recolector de basura que vigilar, sin avisos a las 3 de la madrugada por un heap
descontrolado y con una factura de la nube que ya no parece una nota de rescate.

El borrow checker es lo único en este edificio más estricto que tú.

**Que tus localizadores sigan en silencio y tus p99 sigan planos.**
Loading
Loading