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}
20
21pub fn parse_languages(values: &[String]) -> anyhow::Result<Vec<Language>> {
23 let mut langs = Vec::new();
24 for value in values {
25 for raw in value.split(',') {
26 let name = raw.trim();
27 if name.is_empty() {
28 continue;
29 }
30 let lang = Language::from_str(name).ok_or_else(|| {
31 anyhow::anyhow!(
32 "unknown language '{}'. Supported: typescript, python, go, swift, kotlin",
33 name
34 )
35 })?;
36 if !langs.contains(&lang) {
37 langs.push(lang);
38 }
39 }
40 }
41 Ok(langs)
42}
43
44pub fn all_languages() -> Vec<Language> {
45 vec![
46 Language::TypeScript,
47 Language::Python,
48 Language::Go,
49 Language::Swift,
50 Language::Kotlin,
51 ]
52}