use serde::{Serialize, Deserialize};
use shm_rs::static_scheme::generator::RustCode;
use shm_rs::static_scheme::init;
use shm_rs::dynamic_scheme::environment;
use shm_rs::serializator::serializator;
#[derive(Debug, Serialize, Deserialize)]
pub enum TestUseEnum
{
Yellow,
Red,
Green,
ColorRgb(u64, u64, u64),
ColorRgbaProfile{ profile_name: String, col_r: u64, col_g: u64, col_b: u64, col_a: u64 }
}
fn main()
{
let curdir = std::env::current_dir().unwrap();
println!("{}", curdir.display());
let schm = init::SchemeInit::new_with_path(curdir).unwrap();
let res = schm.run_from_file("examples/scheme_proc_enum/init_use1.shm", None).unwrap();
let resser = res.get("use1").unwrap().clone();
let mut curdir = std::env::current_dir().unwrap();
curdir.push("examples/scheme_proc_enum/init_use_dyn1.shm");
let (_dynenv, dyn_res) =
environment::DynEnvironment::from_file(curdir, resser.clone()).unwrap();
let ret = serializator::Serialization::serialize(resser.clone(), dyn_res.clone()).unwrap();
let serialized = serde_json::to_string(&ret).unwrap();
println!("Result:\n{}", serialized);
let local_inst =
TestUseEnum::ColorRgbaProfile
{
profile_name: "profile1".to_string(),
col_r: 6,
col_g: 5,
col_b: 64,
col_a: 100
};
let local_inst_ser = serde_json::to_string(&local_inst).unwrap();
assert_eq!(local_inst_ser.as_str(), serialized.as_str());
let deserialized: TestUseEnum = serde_json::from_str(&serialized).unwrap();
println!("Deserialized result: \n{:?}", deserialized);
let mut rc = RustCode::new(&["Clone", "Debug", "Serialize", "Deserialize"], &["Clone", "Debug", "Serialize", "Deserialize"]);
println!("Structures: ");
match resser.generate_rust_structs(&mut rc)
{
Ok(_) =>
{
println!("{}", rc);
},
Err(e) =>
{
panic!("{}", e);
}
}
}