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::*;