#![allow(clippy::unwrap_used)]
#![allow(clippy::expect_used)]
use telltale_runtime::compiler::{parse_dsl, project};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let dsl = r"
protocol TestParamRoles =
roles Coordinator, Worker[3]
Coordinator { shard : 0 }
-> Worker[0] : Task of jobs.Task
Worker[0]
-> Coordinator : Result of jobs.Result
";
println!("Parsing choreography with parameterized roles...\n");
let choreography = parse_dsl(dsl)?;
println!("Successfully parsed choreography: {}", choreography.name);
println!(" Roles:");
for role in &choreography.roles {
if let Some(size) = role.array_size() {
println!(
" - {} (array size: {})",
role.name(),
quote::quote!(#size)
);
} else if role.index().is_some() {
println!(" - {}[{}]", role.name(), role.index().unwrap());
} else {
println!(" - {}", role.name());
}
}
choreography.validate()?;
println!("\nChoreography validated successfully");
println!("\nProjecting to local types:");
for role in &choreography.roles {
match project(&choreography, role) {
Ok(local_type) => {
println!(" - {}: {:?}", role.name(), local_type);
}
Err(e) => {
println!(" - {}: Error - {}", role.name(), e);
}
}
}
println!("\nParameterized roles support is working!");
Ok(())
}