//! Nickel integration for typedialog
//!
//! This module provides bidirectional integration between Nickel configuration schemas
//! and typedialog interactive forms:
//!
//! 1. **Nickel → Form**: Extract metadata from Nickel schemas and generate TOML forms
//! 2. **Form Execution**: Run interactive forms (existing typedialog functionality)
//! 3. **Results → Nickel**: Serialize form results back to valid Nickel with contracts
//! 4. **Template Metaprogramming**: Render .ncl.j2 templates to generate Nickel code
//!
//! # Example
//!
//! ```ignore
//! use typedialog::nickel::NickelCli;
//! use std::path::Path;
//!
//! // Verify nickel CLI is available
//! NickelCli::verify()?;
//!
//! // Extract metadata from schema
//! let metadata = NickelCli::query(Path::new("schema.ncl"), Some("inputs"))?;
//!
//! // Parse into intermediate representation
//! let schema_ir = MetadataParser::parse(metadata)?;
//!
//! // Generate TOML form
//! let form = TomlGenerator::generate(&schema_ir)?;
//! ```

pub mod alias_generator;
pub mod cli;
pub mod contract_parser;
pub mod contracts;
pub mod defaults_extractor;
pub mod encryption_contract_parser;
pub mod field_mapper;
pub mod i18n_extractor;
pub mod parser;
pub mod roundtrip;
pub mod schema_ir;
pub mod serializer;
pub mod summary;
pub mod template_engine;
pub mod template_renderer;
pub mod toml_generator;
pub mod types;

pub use alias_generator::AliasGenerator;
pub use cli::NickelCli;
pub use contract_parser::{ContractParser, ParsedContracts};
pub use defaults_extractor::DefaultsExtractor;
pub use encryption_contract_parser::EncryptionContractParser;
pub use field_mapper::FieldMapper;
pub use i18n_extractor::I18nExtractor;
pub use parser::MetadataParser;
pub use roundtrip::{RoundtripConfig, RoundtripResult};
pub use schema_ir::{ContractCall, EncryptionMetadata, NickelFieldIR, NickelSchemaIR, NickelType};
pub use serializer::NickelSerializer;
pub use summary::{FieldChange, RoundtripSummary};
pub use template_engine::TemplateEngine;
pub use template_renderer::NickelTemplateContext;
pub use toml_generator::TomlGenerator;
pub use types::TypeMapper;
