Module generator

Module generator 

Source
Expand description

§AST Generation Engine

This module handles the transformation of user-friendly BuildRequest structures into intermediate Abstract Syntax Trees (AST) that can be rendered as DDEX XML.

§Architecture Overview

Generation Pipeline
┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│  BuildRequest   │───▶│   ASTGenerator   │───▶│      AST        │
│ (user-friendly) │    │                  │    │ (tree structure)│
└─────────────────┘    └──────────────────┘    └─────────────────┘
          │                       │                       │
          ▼                       ▼                       ▼
   ┌─────────────┐      ┌─────────────────┐    ┌─────────────────┐
   │ • Releases  │      │ • Schema Rules  │    │ • Elements      │
   │ • Tracks    │      │ • Validation    │    │ • Attributes    │
   │ • Metadata  │      │ • Linking       │    │ • Namespaces    │
   │ • Deals     │      │ • References    │    │ • Structure     │
   └─────────────┘      └─────────────────┘    └─────────────────┘

§Key Components

  • ASTGenerator: Main orchestrator that converts requests to AST
  • xml_writer: High-level XML writer with formatting
  • optimized_xml_writer: Performance-optimized XML writer for large files

§Generation Process

  1. Schema Selection: Choose DDEX version and namespace configuration
  2. Structure Generation: Create hierarchical element structure
  3. Reference Linking: Establish cross-references between elements
  4. Validation: Ensure generated AST meets schema requirements
  5. Optimization: Apply performance optimizations for large documents

§Usage Example

use ddex_builder::generator::ASTGenerator;
use ddex_builder::{BuildRequest, ReleaseRequest};

let mut generator = ASTGenerator::new("4.3".to_string());

let request = BuildRequest {
    releases: vec![ReleaseRequest {
        release_id: "R123".to_string(),
        tracks: vec![/* track data */],
        // ... other fields
    }],
    // ... other fields
};

let ast = generator.generate(&request)?;
// AST is now ready for XML serialization

§Performance Characteristics

  • Small releases (< 10 tracks): ~1-2ms generation time
  • Medium releases (10-50 tracks): ~5-8ms generation time
  • Large releases (50+ tracks): ~15-25ms generation time
  • Memory usage: ~2-5MB peak for typical releases

§Error Handling

The generator validates input data and provides detailed error messages for:

  • Missing required fields
  • Invalid reference linkages
  • Schema constraint violations
  • Data format issues

Modules§

optimized_xml_writer
High-performance XML writer optimized for DDEX Builder
xml_writer
XML serialization from AST

Structs§

ASTGenerator
AST generator for converting build requests to abstract syntax trees