mirror of
https://github.com/Noratrieb/haesli.git
synced 2026-01-14 11:45:02 +01:00
more codegen
This commit is contained in:
parent
d5fd9abdf7
commit
08628022c2
3 changed files with 40 additions and 12 deletions
8
Cargo.lock
generated
8
Cargo.lock
generated
|
|
@ -17,6 +17,8 @@ dependencies = [
|
|||
name = "amqp_codegen"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"heck",
|
||||
"strong-xml",
|
||||
]
|
||||
|
||||
|
|
@ -77,6 +79,12 @@ dependencies = [
|
|||
"wasi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.1.19"
|
||||
|
|
|
|||
|
|
@ -6,4 +6,6 @@ edition = "2021"
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.53"
|
||||
heck = "0.4.0"
|
||||
strong-xml = "0.6.3"
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
use anyhow::Result;
|
||||
use heck::{ToSnakeCase, ToUpperCamelCase};
|
||||
use std::fs;
|
||||
use strong_xml::{XmlError, XmlRead};
|
||||
|
||||
|
|
@ -63,18 +65,34 @@ struct Field {
|
|||
asserts: Vec<Assert>,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
fn main() -> Result<()> {
|
||||
let content = fs::read_to_string("./amqp-0-9-1.xml").unwrap();
|
||||
|
||||
let amqp: Result<Amqp, XmlError> = Amqp::from_str(&content);
|
||||
|
||||
match amqp {
|
||||
Ok(amqp) => {
|
||||
println!("{amqp:#?}");
|
||||
}
|
||||
Err(err) => {
|
||||
eprintln!("{err}");
|
||||
return;
|
||||
}
|
||||
}
|
||||
let amqp = Amqp::from_str(&content)?;
|
||||
codegen(&amqp)
|
||||
}
|
||||
|
||||
fn codegen(amqp: &Amqp) -> Result<()> {
|
||||
for class in &amqp.classes {
|
||||
let enum_name = class.name.to_upper_camel_case();
|
||||
println!("///////// ---- Class {enum_name}");
|
||||
println!("enum {enum_name} {{");
|
||||
for method in &class.methods {
|
||||
let method_name = method.name.to_upper_camel_case();
|
||||
print!(" {method_name}");
|
||||
if method.fields.len() > 0 {
|
||||
println!(" {{");
|
||||
for field in &method.fields {
|
||||
let field_name = field.name.to_snake_case();
|
||||
println!(" {field_name}: (),");
|
||||
}
|
||||
println!(" }}");
|
||||
} else {
|
||||
println!(",");
|
||||
}
|
||||
}
|
||||
println!("}}");
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue