use std::path::PathBuf;
use swift_mt_message::{
SampleGenerator, ScenarioConfig, generate_sample, generate_sample_with_config,
messages::mt103::MT103,
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Sample Generation with Custom Paths Example\n");
println!("1. Using default configuration (checks SWIFT_SCENARIO_PATH env var):");
match generate_sample::<MT103>("MT103", None) {
Ok(msg) => {
println!(" ✓ Generated MT103 using default paths");
println!(
" Transaction Reference: {}",
msg.fields.field_20.reference
);
}
Err(e) => println!(" ✗ Failed: {}", e),
}
println!();
println!("2. Using custom configuration with specific paths:");
let config = ScenarioConfig::with_paths(vec![
PathBuf::from("test_scenarios"),
PathBuf::from("../test_scenarios"),
PathBuf::from("./custom_scenarios"), ]);
match generate_sample_with_config::<MT103>("MT103", Some("standard"), &config) {
Ok(msg) => {
println!(" ✓ Generated MT103 with custom config");
println!(
" Transaction Reference: {}",
msg.fields.field_20.reference
);
}
Err(e) => println!(" ✗ Failed: {}", e),
}
println!();
println!("3. Using SampleGenerator with builder pattern:");
let generator = SampleGenerator::new()
.with_path(PathBuf::from("./my_scenarios"))
.with_path(PathBuf::from("./backup_scenarios"))
.with_path(PathBuf::from("test_scenarios"));
match generator.generate::<MT103>("MT103", Some("minimal")) {
Ok(msg) => {
println!(" ✓ Generated MT103 using SampleGenerator");
println!(
" Transaction Reference: {}",
msg.fields.field_20.reference
);
}
Err(e) => println!(" ✗ Failed: {}", e),
}
println!();
println!("4. Generating multiple scenarios with same generator:");
let generator = SampleGenerator::new();
let scenarios = vec!["minimal", "standard", "stp"];
for scenario in scenarios {
match generator.generate::<MT103>("MT103", Some(scenario)) {
Ok(msg) => {
println!(
" ✓ Generated MT103/{}: {}",
scenario, msg.fields.field_20.reference
);
}
Err(e) => println!(" ✗ Failed to generate MT103/{}: {}", scenario, e),
}
}
println!("\nDone!");
Ok(())
}