mirror of
https://github.com/Noratrieb/haesli.git
synced 2026-01-14 19:55:03 +01:00
move codegen to xtask
This commit is contained in:
parent
c5d83fe776
commit
077b6fd633
12 changed files with 1456 additions and 1727 deletions
2
.cargo/config.toml
Normal file
2
.cargo/config.toml
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
[alias]
|
||||||
|
xtask = "run --package xtask --"
|
||||||
18
Cargo.lock
generated
18
Cargo.lock
generated
|
|
@ -37,15 +37,6 @@ dependencies = [
|
||||||
"tracing-subscriber",
|
"tracing-subscriber",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "amqp_codegen"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"heck",
|
|
||||||
"itertools",
|
|
||||||
"strong-xml",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "amqp_transport"
|
name = "amqp_transport"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
@ -672,3 +663,12 @@ name = "xmlparser"
|
||||||
version = "0.13.3"
|
version = "0.13.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "114ba2b24d2167ef6d67d7d04c8cc86522b87f490025f39f0303b7db5bf5e3d8"
|
checksum = "114ba2b24d2167ef6d67d7d04c8cc86522b87f490025f39f0303b7db5bf5e3d8"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "xtask"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"heck",
|
||||||
|
"itertools",
|
||||||
|
"strong-xml",
|
||||||
|
]
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
[workspace]
|
[workspace]
|
||||||
members = ["./amqp_transport", "./amqp_codegen"]
|
members = [".", "./amqp_transport", "xtask"]
|
||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "amqp"
|
name = "amqp"
|
||||||
|
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
codegen for method serialization/deserialization
|
|
||||||
|
|
||||||
run using `cargo r > ../amqp_transport/src/classes/generated.rs`
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,5 +1,5 @@
|
||||||
[package]
|
[package]
|
||||||
name = "amqp_codegen"
|
name = "xtask"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
|
|
@ -8,6 +8,4 @@ edition = "2021"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
heck = "0.4.0"
|
heck = "0.4.0"
|
||||||
itertools = "0.10.3"
|
itertools = "0.10.3"
|
||||||
strong-xml = "0.6.3"
|
strong-xml = "0.6.3"
|
||||||
|
|
||||||
[features]
|
|
||||||
|
|
@ -2,13 +2,15 @@ mod parser;
|
||||||
mod random;
|
mod random;
|
||||||
mod write;
|
mod write;
|
||||||
|
|
||||||
use crate::parser::codegen_parser;
|
|
||||||
use crate::random::codegen_random;
|
|
||||||
use crate::write::codegen_write;
|
|
||||||
use heck::ToUpperCamelCase;
|
use heck::ToUpperCamelCase;
|
||||||
|
use parser::codegen_parser;
|
||||||
|
use random::codegen_random;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::iter::Peekable;
|
use std::iter::Peekable;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
use std::str::FromStr;
|
||||||
use strong_xml::XmlRead;
|
use strong_xml::XmlRead;
|
||||||
|
use write::codegen_write;
|
||||||
|
|
||||||
#[derive(Debug, XmlRead)]
|
#[derive(Debug, XmlRead)]
|
||||||
#[xml(tag = "amqp")]
|
#[xml(tag = "amqp")]
|
||||||
|
|
@ -97,8 +99,15 @@ struct Doc {
|
||||||
kind: Option<String>,
|
kind: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
pub fn main() {
|
||||||
let content = fs::read_to_string("./amqp0-9-1.xml").unwrap();
|
let this_file = PathBuf::from_str(file!()).unwrap();
|
||||||
|
let expected_location = this_file
|
||||||
|
.parent()
|
||||||
|
.unwrap()
|
||||||
|
.parent()
|
||||||
|
.unwrap()
|
||||||
|
.join("amqp0-9-1.xml");
|
||||||
|
let content = fs::read_to_string(expected_location).unwrap();
|
||||||
|
|
||||||
let amqp = match Amqp::from_str(&content) {
|
let amqp = match Amqp::from_str(&content) {
|
||||||
Ok(amqp) => amqp,
|
Ok(amqp) => amqp,
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::{
|
use super::{
|
||||||
field_type, resolve_type_from_domain, snake_case, subsequent_bit_fields, Amqp, Assert, Class,
|
field_type, resolve_type_from_domain, snake_case, subsequent_bit_fields, Amqp, Assert, Class,
|
||||||
Domain, Method,
|
Domain, Method,
|
||||||
};
|
};
|
||||||
|
|
@ -17,7 +17,7 @@ fn domain_function_name(domain_name: &str) -> String {
|
||||||
format!("domain_{domain_name}")
|
format!("domain_{domain_name}")
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn codegen_parser(amqp: &Amqp) {
|
pub(super) fn codegen_parser(amqp: &Amqp) {
|
||||||
println!(
|
println!(
|
||||||
"pub mod parse {{
|
"pub mod parse {{
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
use crate::{snake_case, Amqp};
|
use super::{snake_case, Amqp};
|
||||||
use heck::ToUpperCamelCase;
|
use heck::ToUpperCamelCase;
|
||||||
|
|
||||||
pub(crate) fn codegen_random(amqp: &Amqp) {
|
pub(super) fn codegen_random(amqp: &Amqp) {
|
||||||
println!(
|
println!(
|
||||||
"#[cfg(test)]
|
"#[cfg(test)]
|
||||||
mod random {{
|
mod random {{
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
use crate::{field_type, resolve_type_from_domain, snake_case, subsequent_bit_fields, Amqp};
|
use super::{field_type, resolve_type_from_domain, snake_case, subsequent_bit_fields, Amqp};
|
||||||
use heck::ToUpperCamelCase;
|
use heck::ToUpperCamelCase;
|
||||||
|
|
||||||
pub(crate) fn codegen_write(amqp: &Amqp) {
|
pub(super) fn codegen_write(amqp: &Amqp) {
|
||||||
println!(
|
println!(
|
||||||
"pub mod write {{
|
"pub mod write {{
|
||||||
use super::*;
|
use super::*;
|
||||||
22
xtask/src/main.rs
Normal file
22
xtask/src/main.rs
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
mod codegen;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let command = std::env::args().nth(1).unwrap_or_else(|| {
|
||||||
|
eprintln!("No task provided");
|
||||||
|
help();
|
||||||
|
std::process::exit(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
match command.as_str() {
|
||||||
|
"generate" | "gen" => codegen::main(),
|
||||||
|
_ => eprintln!("Unknown command {command}."),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn help() {
|
||||||
|
println!(
|
||||||
|
"Available tasks:
|
||||||
|
generate - Generate amqp method code in `amqp_transport/src/classes/generated.rs.
|
||||||
|
Dumps code to stdout and should be redirected manually."
|
||||||
|
);
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue