Files
ARCADIA-Studio/crates/oa-core/examples/generate_release1.rs
T

54 lines
1.8 KiB
Rust

//! Generate only the new teaching-project files; old compatibility examples stay untouched.
#[path = "../../../examples/release1/model.rs"]
mod teaching;
fn main() -> Result<(), Box<dyn std::error::Error>> {
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(())
}