mirror of
https://github.com/Noratrieb/haesli.git
synced 2026-01-16 20:55:03 +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"
|
name = "amqp_codegen"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"heck",
|
||||||
"strong-xml",
|
"strong-xml",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -77,6 +79,12 @@ dependencies = [
|
||||||
"wasi",
|
"wasi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "heck"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hermit-abi"
|
name = "hermit-abi"
|
||||||
version = "0.1.19"
|
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
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
anyhow = "1.0.53"
|
||||||
|
heck = "0.4.0"
|
||||||
strong-xml = "0.6.3"
|
strong-xml = "0.6.3"
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
use anyhow::Result;
|
||||||
|
use heck::{ToSnakeCase, ToUpperCamelCase};
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use strong_xml::{XmlError, XmlRead};
|
use strong_xml::{XmlError, XmlRead};
|
||||||
|
|
||||||
|
|
@ -63,18 +65,34 @@ struct Field {
|
||||||
asserts: Vec<Assert>,
|
asserts: Vec<Assert>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() -> Result<()> {
|
||||||
let content = fs::read_to_string("./amqp-0-9-1.xml").unwrap();
|
let content = fs::read_to_string("./amqp-0-9-1.xml").unwrap();
|
||||||
|
|
||||||
let amqp: Result<Amqp, XmlError> = Amqp::from_str(&content);
|
let amqp = Amqp::from_str(&content)?;
|
||||||
|
codegen(&amqp)
|
||||||
match amqp {
|
}
|
||||||
Ok(amqp) => {
|
|
||||||
println!("{amqp:#?}");
|
fn codegen(amqp: &Amqp) -> Result<()> {
|
||||||
}
|
for class in &amqp.classes {
|
||||||
Err(err) => {
|
let enum_name = class.name.to_upper_camel_case();
|
||||||
eprintln!("{err}");
|
println!("///////// ---- Class {enum_name}");
|
||||||
return;
|
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