csw_generate/
lib.rs

1//! # csw-generate
2//!
3//! Code generation for the Categorical Semantics Workbench.
4//!
5//! This crate generates working type checkers, interpreters, and parsers
6//! from derived type systems. The generated code is standalone and can
7//! be used directly in your projects.
8//!
9//! ## Overview
10//!
11//! Given a `TypeSystem` (from `csw-derive`), this crate can generate:
12//!
13//! - **Type checkers**: Verify that terms are well-typed
14//! - **Interpreters**: Evaluate terms to values
15//! - **Parsers**: Parse source code into ASTs (optional)
16//! - **Documentation**: Markdown documentation of the type system
17//!
18//! ## Example
19//!
20//! ```rust,ignore
21//! use csw_core::CategoryBuilder;
22//! use csw_derive::Deriver;
23//! use csw_generate::RustGenerator;
24//! use std::path::Path;
25//!
26//! // Define and derive
27//! let ccc = CategoryBuilder::new("STLC")
28//!     .with_terminal()
29//!     .with_products()
30//!     .with_exponentials()
31//!     .cartesian()
32//!     .build()
33//!     .unwrap();
34//!
35//! let type_system = Deriver::derive(&ccc);
36//!
37//! // Generate Rust code
38//! RustGenerator::generate(&type_system, Path::new("generated/stlc/"))
39//!     .expect("code generation failed");
40//! ```
41//!
42//! ## Generated Output
43//!
44//! The generator creates a complete Rust crate:
45//!
46//! ```text
47//! generated/stlc/
48//! ├── Cargo.toml
49//! ├── src/
50//! │   ├── lib.rs
51//! │   ├── types.rs      # Type enum
52//! │   ├── terms.rs      # Term enum
53//! │   ├── checker.rs    # Type checker
54//! │   └── interpreter.rs # Evaluator
55//! └── README.md
56//! ```
57
58#![warn(missing_docs)]
59#![warn(rustdoc::missing_crate_level_docs)]
60
61mod generator;
62mod rust;
63
64pub use generator::*;
65pub use rust::*;