Codificador/Decodificador Base64
Archivo: src/base64.rs (139 líneas)
¿Por qué existe?
Implementa la codificación y decodificación Base64 según RFC 4648 con una implementación manual optimizada (~50x más rápida que naive). Reemplaza por completo la dependencia externa de la crate base64, manteniendo el espíritu de Forja de cero dependencias externas para el núcleo del compilador.
¿Cómo funciona?
- Usa una tabla de codificación
ENCcon los 64 caracteres estándar (A-Z,a-z,0-9,+/). - Una tabla de decodificación
DECgenerada comoconst fnen tiempo de compilación (LUT de 256 bytes con -1 para caracteres inválidos). - Procesa los datos en chunks de 3 bytes → 4 caracteres Base64.
- Maneja el padding
=para el resto (1 o 2 bytes finales).
API Pública
| Función | Descripción |
|---|---|
b64_encode(datos) -> String | Codifica un slice de bytes a una String Base64 |
b64_decode(s) | Decodifica una string Base64 a bytes |
¿Dónde se usa?
Se utiliza principalmente en el módulo src/codificacion.fa de la stdlib, que expone las funciones base64_codificar y base64_decodificar a los programas Forja. También es usado internamente por el módulo crypto para manejo de claves en formatos codificados.
Optimizaciones
- LUT precalculada: La tabla de decodificación se genera en tiempo de compilación (
const fn), sin costo en runtime. - Chunking manual: Procesa 3 bytes por iteración minimizando branches.
- Sin asignaciones intermedias: Pre-asigna el
Vecde salida con la capacidad exacta necesaria.
💡 Dato: Al estar implementado en Rust puro sin dependencias, este módulo contribuye a que el binario de Forja sea un ejecutable único sin DLLs ni librerías externas.