1pub mod drift;
4pub mod emit;
5pub mod parser;
6pub mod project;
7pub mod scan;
8
9use std::path::PathBuf;
10
11pub use typewriter_core::{config::TypewriterConfig, ir::Language, ir::TypeDef};
12
13#[derive(Debug, Clone)]
15pub struct TypeSpec {
16 pub type_def: TypeDef,
17 pub targets: Vec<Language>,
18 pub source_path: PathBuf,
19 pub zod_schema: Option<bool>,
20}
21
22pub fn parse_languages(values: &[String]) -> anyhow::Result<Vec<Language>> {
24 let mut langs = Vec::new();
25 for value in values {
26 for raw in value.split(',') {
27 let name = raw.trim();
28 if name.is_empty() {
29 continue;
30 }
31 let lang = Language::from_str(name).ok_or_else(|| {
32 anyhow::anyhow!(
33 "unknown language '{}'. Supported: typescript, python, go, swift, kotlin",
34 name
35 )
36 })?;
37 if !langs.contains(&lang) {
38 langs.push(lang);
39 }
40 }
41 }
42 Ok(langs)
43}
44
45pub fn all_languages() -> Vec<Language> {
46 vec![
47 Language::TypeScript,
48 Language::Python,
49 Language::Go,
50 Language::Swift,
51 Language::Kotlin,
52 ]
53}