//! Generate only the new teaching-project files; old compatibility examples stay untouched. #[path = "../../../examples/release1/model.rs"] mod teaching; fn main() -> Result<(), Box> { let directory = std::env::args_os() .nth(1) .map(std::path::PathBuf::from) .unwrap_or_else(|| "examples/release1".into()); let lesson = teaching::build(); let bundle = teaching::checked_bundle(&lesson.project); for (name, source) in &bundle.files { let path = directory.join(name); std::fs::create_dir_all(path.parent().unwrap())?; std::fs::write(path, source)?; } for (name, value) in [ ("model.json", serde_json::to_value(&lesson.project)?), ( "transition-before.json", serde_json::to_value(&lesson.before_transition)?, ), ( "transition-request.json", serde_json::to_value(&lesson.request)?, ), ( "expected-diagnostics.json", serde_json::to_value(oa_core::validation::validate(&lesson.project))?, ), ] { std::fs::write( directory.join(name), serde_json::to_string_pretty(&value)? + "\n", )?; } println!( "Validated {} elements, {} relations, {} views, {} traces; wrote {} source files to {}", lesson.project.elements.len(), lesson.project.relations.len(), lesson.project.diagrams.len(), lesson.project.traces.len(), bundle.files.len(), directory.display() ); for issue in oa_core::validation::validate(&lesson.project) { println!( "{:?} {} {:?}: {}", issue.severity, issue.code, issue.element, issue.message ); } Ok(()) }