use std::fs::File;
use std::io::Write;
use strict_encoding::{libname, STRICT_TYPES_LIB};
use strict_types::stl::std_stl;
use strict_types::{LibBuilder, SystemBuilder, TypeLib};
fn main() {
let std = std_stl();
let builder = LibBuilder::with(libname!(STRICT_TYPES_LIB), [std.to_dependency_types()])
.transpile::<TypeLib>();
let lib = builder.compile().unwrap();
let builder = SystemBuilder::new().import(lib).unwrap().import(std).unwrap();
let sys = builder.finalize().unwrap_or_else(|errors| {
for err in errors {
eprintln!("Error: {err}");
}
panic!()
});
let tt = sys.type_tree("StrictTypes.TypeLib").unwrap();
let mut file = File::create("stl/TypeLib.vesper").expect("unable to create file");
writeln!(
file,
"{{-
Description: Data type layout in Vesper language
Author: Dr Maxim Orlovsky <orlovsky@ubideco.org>
Copyright (C) 2024 UBIDECO Institute. All rights reserved.
License: Apache-2.0
-}}
{STRICT_TYPES_LIB} vesper lexicon=types
"
)
.unwrap();
write!(file, "{tt}").unwrap();
}