54 lines
1.8 KiB
Rust
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(())
|
|
}
|