# 006 - Builder API
## Context
`src/builder/` permite crear XML sin manipular `NodeId` directamente. La macro `xml!` debe apoyarse en este builder.
El builder tambien debe ser la base de una experiencia tipo Leptos: componentes Rust, props tipadas, children y composicion declarativa.
Fuente: `plan_libreria_xml_generica_rust.md`, secciones "`xdoc-builder`", "Composicion antes que macro-magia" y "Fase 3 - Builder API". Adaptacion local: implementar en `src/builder/`.
## Dependencies
[x] 004 - Core Document Tree.
[x] 005 - Writer Serializer para pruebas de salida.
## Instructions
[x] Crear `src/builder/`.
[x] Implementar builder de documentos.
[x] Implementar builder de elementos.
[x] Implementar builder de fragmentos.
[x] Agregar helpers para texto.
[x] Agregar helpers para atributos.
[x] Agregar helpers para namespaces.
[x] Permitir composicion con funciones Rust.
[x] Permitir agregar colecciones con iteradores.
[x] Exponer primitivas que permitan implementar componentes encima.
[x] Definir conversiones hacia fragmentos XML.
[x] Retornar errores claros.
## Checklist
[x] `DocumentBuilder` existe.
[x] `ElementBuilder` existe.
[x] `FragmentBuilder` existe.
[x] Se puede crear documento con root.
[x] Se puede agregar hijo anidado.
[x] Se puede agregar texto.
[x] Se puede agregar atributo estatico.
[x] Se puede agregar atributo dinamico.
[x] Se puede declarar namespace default.
[x] Se puede declarar namespace con prefijo.
[x] Se puede construir desde `Vec` o iterador.
[x] Se puede condicionar un nodo desde Rust normal.
[x] Existe una forma clara de convertir valores a nodo o fragmento.
[x] Existe una forma clara de pasar children a una funcion componente.
[x] Errores invalidos devuelven `XmlError`.
## Verification
Ejecutar:
```bash
cargo test builder
cargo test document_builder
cargo test fragment_builder
cargo test namespaces
cargo test collections
```
Criterio medible:
[x] Test crea XML de 3 niveles usando builder.
[x] Test crea XML con namespace default y prefijo.
[x] Test crea lista de nodos desde iterador.
[x] Test crea XML usando una funcion Rust como componente simple.
[x] Test pasa children a una funcion componente simple.
[x] Test valida error por nombre invalido.
[x] Test serializa resultado con `src/writer/`.
## Acceptance Criteria
[x] Usuario puede crear XML complejo sin tocar `NodeId`.
[x] Builder no duplica reglas internas del core innecesariamente.
[x] Builder queda listo para ser backend de `xml!`.
[x] Builder queda listo para soportar componentes tipo Leptos.
## Worklog
[x] Completado el 2026-06-10. Verificado con los comandos de la tarea y la verificacion minima global.