Añade ConfigManager que maneja automáticamente: - Carga/creación de archivo config (loadOrCreate) - Auto-guardado en deinit si hay cambios pendientes - Sistema de observers con contexto para sincronización externa Cambios: - ConfigManager(variables, ConfigType, app_name) type - Observer con contexto: fn(change, config, ctx) void - addObserver(callback, context) para registrar listeners - Métodos: get, set, getConfig, getConfigMut, markDirty, isDirty 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
200 lines
6.6 KiB
Markdown
200 lines
6.6 KiB
Markdown
# ZCATCONFIG - Sistema de Configuracion Declarativo
|
|
|
|
> **IMPORTANTE PARA CLAUDE**: Lee la seccion "PROTOCOLO DE INICIO" antes de hacer cualquier cosa.
|
|
|
|
---
|
|
|
|
## PROTOCOLO DE INICIO (LEER PRIMERO)
|
|
|
|
### Paso 1: Leer normas del equipo
|
|
```
|
|
/mnt/cello2/arno/re/recode/teamdocs/LAST_UPDATE.md
|
|
```
|
|
|
|
### Paso 2: Verificar estado del proyecto
|
|
```bash
|
|
cd /mnt/cello2/arno/re/recode/zig/zcatconfig
|
|
git status
|
|
git log --oneline -5
|
|
PATH=/mnt/cello2/arno/re/recode/zig/zig-0.15.2/zig-x86_64-linux-0.15.2:$PATH zig build test
|
|
```
|
|
|
|
---
|
|
|
|
## INFORMACION DEL PROYECTO
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **Nombre** | zcatconfig |
|
|
| **Version** | v0.1.0 |
|
|
| **Fecha inicio** | 2025-12-17 |
|
|
| **Estado** | EN DESARROLLO - Estructura inicial |
|
|
| **Lenguaje** | Zig 0.15.2 |
|
|
| **Dependencias** | Ninguna (Zig puro) |
|
|
|
|
### Descripcion
|
|
|
|
**zcatconfig** es una libreria para gestion de configuracion declarativa:
|
|
- Definicion de variables con metadatos (tipo, default, descripcion, categoria)
|
|
- Generacion automatica de struct Config via comptime
|
|
- Persistencia a archivo de texto legible
|
|
- Validacion de valores
|
|
- Sistema Get/Set generico con inline for + @field
|
|
|
|
---
|
|
|
|
## ORIGEN: zsimifactu config/
|
|
|
|
Esta libreria extrae y generaliza el sistema de configuracion implementado en zsimifactu.
|
|
|
|
### Archivos originales en zsimifactu:
|
|
```
|
|
src/config/
|
|
├── config.zig # Re-exports publicos
|
|
├── types.zig # ConfigVariable, ConfigVarType, Color
|
|
├── variables.zig # Definiciones declarativas (proyecto-especifico)
|
|
├── structures.zig # Config struct (proyecto-especifico)
|
|
├── engine.zig # Meta-engine Get/Set con validacion
|
|
└── persistence.zig # Load/Save archivo texto
|
|
```
|
|
|
|
### Que se extrae a zcatconfig:
|
|
- types.zig (completo)
|
|
- engine.zig (generalizado)
|
|
- persistence.zig (generalizado)
|
|
|
|
### Que queda en el proyecto consumidor:
|
|
- variables.zig (definiciones especificas del proyecto)
|
|
- structures.zig (struct Config especifico)
|
|
|
|
---
|
|
|
|
## ARQUITECTURA
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ PROYECTO CONSUMIDOR │
|
|
│ │
|
|
│ variables.zig: │
|
|
│ pub const config_variables = [_]ConfigVariable{ │
|
|
│ .{ .name = "auto_save", .var_type = .boolean, ... }, │
|
|
│ .{ .name = "font_size", .var_type = .integer, ... }, │
|
|
│ }; │
|
|
│ │
|
|
│ structures.zig: │
|
|
│ pub const Config = struct { │
|
|
│ auto_save: bool = true, │
|
|
│ font_size: i32 = 14, │
|
|
│ }; │
|
|
├─────────────────────────────────────────────────────────────────┤
|
|
│ ZCATCONFIG │
|
|
│ │
|
|
│ types.zig: │
|
|
│ ConfigVariable, ConfigVarType, ConfigResult, Color │
|
|
│ │
|
|
│ engine.zig: │
|
|
│ Engine(comptime variables, comptime ConfigStruct) │
|
|
│ - get(), set(), getByName(), setByName() │
|
|
│ - Validacion automatica │
|
|
│ │
|
|
│ persistence.zig: │
|
|
│ - load(config, path, variables) │
|
|
│ - save(config, path, variables) │
|
|
│ - Formato: @variable_name: valor # comentario │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## API PROPUESTA
|
|
|
|
### Uso basico
|
|
|
|
```zig
|
|
const zcatconfig = @import("zcatconfig");
|
|
|
|
// En el proyecto consumidor:
|
|
const variables = @import("config/variables.zig");
|
|
const Config = @import("config/structures.zig").Config;
|
|
|
|
// Crear engine tipado
|
|
const Engine = zcatconfig.Engine(variables.config_variables, Config);
|
|
|
|
// Uso
|
|
var config = Config{};
|
|
Engine.load(&config, "app_config.txt") catch {};
|
|
config.font_size = 16;
|
|
try Engine.save(&config, "app_config.txt");
|
|
```
|
|
|
|
### Tipos de variables soportados
|
|
|
|
| Tipo | Zig Type | Formato archivo |
|
|
|------|----------|-----------------|
|
|
| boolean | bool | Si/No |
|
|
| integer | i32 | 123 |
|
|
| float | f32 | 1.5 |
|
|
| string | []const u8 | texto libre |
|
|
| color | Color | RGB(r,g,b) |
|
|
| enum_tipo | enum | NombreVariante |
|
|
|
|
---
|
|
|
|
## COMANDOS
|
|
|
|
```bash
|
|
# Compilar
|
|
PATH=/mnt/cello2/arno/re/recode/zig/zig-0.15.2/zig-x86_64-linux-0.15.2:$PATH zig build
|
|
|
|
# Tests
|
|
PATH=/mnt/cello2/arno/re/recode/zig/zig-0.15.2/zig-x86_64-linux-0.15.2:$PATH zig build test
|
|
```
|
|
|
|
---
|
|
|
|
## RUTAS
|
|
|
|
```bash
|
|
# Este proyecto
|
|
/mnt/cello2/arno/re/recode/zig/zcatconfig/
|
|
|
|
# Proyecto origen (referencia)
|
|
/mnt/cello2/arno/re/recode/zig/zsimifactu/src/config/
|
|
|
|
# Documentacion equipo
|
|
/mnt/cello2/arno/re/recode/teamdocs/
|
|
```
|
|
|
|
---
|
|
|
|
## PLAN DE TRABAJO
|
|
|
|
### Fase 1: Estructura base - COMPLETADA
|
|
- [x] Crear proyecto (build.zig, CLAUDE.md)
|
|
- [x] Extraer types.zig de zsimifactu
|
|
- [x] Adaptar engine.zig (parametrizar variables y Config)
|
|
- [x] Adaptar persistence.zig
|
|
|
|
### Fase 2: Generalizacion - COMPLETADA
|
|
- [x] Engine generico con comptime
|
|
- [x] Tests unitarios (9 tests)
|
|
- [x] Documentacion API
|
|
|
|
### Fase 3: Integracion - EN PROGRESO
|
|
- [ ] Integrar en zsimifactu como dependencia
|
|
- [ ] Verificar que zsimifactu funciona igual
|
|
|
|
---
|
|
|
|
## EQUIPO
|
|
|
|
- **Usuario (R.Eugenio)**: Desarrollador principal
|
|
- **Claude**: Asistente de programacion (Claude Code / Opus 4.5)
|
|
|
|
---
|
|
|
|
## HISTORIAL
|
|
|
|
| Fecha | Version | Cambios |
|
|
|-------|---------|---------|
|
|
| 2025-12-17 | v0.1.0 | Proyecto creado, estructura inicial |
|