Generate code using a script, not build.rs
Otherwise it's just too rust-analyzer-unfriendly
This commit is contained in:
parent
ba82e349a1
commit
c1196a2e42
7 changed files with 20 additions and 19 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
|||
/target
|
||||
/generated
|
||||
|
|
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -640,7 +640,6 @@ dependencies = [
|
|||
"bytes",
|
||||
"fixed",
|
||||
"nix",
|
||||
"protogen",
|
||||
"sendfd",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
|
|
|
@ -21,6 +21,3 @@ tokio = { version = "1.43.0", features = [ "fs", "net", "rt", "rt-multi-thread",
|
|||
toml = "0.8.20"
|
||||
tracing = "0.1.41"
|
||||
tracing-subscriber = "0.3.19"
|
||||
|
||||
[build-dependencies]
|
||||
protogen = { version = "0.1.0", path = "protogen" }
|
||||
|
|
9
build.rs
9
build.rs
|
@ -1,9 +0,0 @@
|
|||
fn main() {
|
||||
let out_dir = std::env::var_os("OUT_DIR").unwrap();
|
||||
|
||||
protogen::generate_from_dir(&out_dir, "proto");
|
||||
|
||||
println!("cargo::rerun-if-changed=build.rs");
|
||||
println!("cargo::rerun-if-changed=proto");
|
||||
println!("cargo::rerun-if-changed=protogen");
|
||||
}
|
3
generate.sh
Executable file
3
generate.sh
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
cargo run -p protogen
|
|
@ -1,4 +1,4 @@
|
|||
use std::path::Path;
|
||||
use std::{env, path::Path};
|
||||
|
||||
use quick_xml::events::Event;
|
||||
use quote::{format_ident, quote};
|
||||
|
@ -7,6 +7,17 @@ use types::{WlArgType, WlInterface, WlMsg, WlMsgType};
|
|||
|
||||
mod types;
|
||||
|
||||
pub fn main() {
|
||||
let proto_path = env::current_dir()
|
||||
.expect("current dir undefined")
|
||||
.join("proto");
|
||||
let generated_path = env::current_dir()
|
||||
.expect("current dir undefined")
|
||||
.join("generated");
|
||||
std::fs::create_dir(&generated_path).ok();
|
||||
generate_from_dir(&generated_path, &proto_path);
|
||||
}
|
||||
|
||||
pub fn generate_from_dir(out_dir: impl AsRef<Path>, p: impl AsRef<Path>) {
|
||||
let proto_mods_dir = out_dir.as_ref().join("proto_generated");
|
||||
std::fs::remove_dir_all(&proto_mods_dir).ok();
|
||||
|
@ -36,10 +47,8 @@ pub fn generate_from_dir(out_dir: impl AsRef<Path>, p: impl AsRef<Path>) {
|
|||
.ok();
|
||||
}
|
||||
|
||||
//let file_name_ident: Vec<_> = file_names.iter().map(|name| format_ident!("{name}")).collect();
|
||||
|
||||
let main_gen = quote! {
|
||||
#( include!(concat!(env!("OUT_DIR"), "/proto_generated/", #file_names, ".rs")); )*
|
||||
#( include!(concat!("../generated/proto_generated/", #file_names, ".rs")); )*
|
||||
|
||||
fn wl_init_parsers(event_parsers: &mut HashMap<(WlObjectType, u16), &'static dyn WlMsgParserFn>, request_parsers: &mut HashMap<(WlObjectType, u16), &'static dyn WlMsgParserFn>) {
|
||||
#( #add_parsers_fn(event_parsers, request_parsers); )*
|
|
@ -236,5 +236,6 @@ pub fn lookup_known_object_type(name: &str) -> Option<WlObjectType> {
|
|||
/// The default object ID of wl_display
|
||||
pub const WL_DISPLAY_OBJECT_ID: u32 = 1;
|
||||
|
||||
// Include code generated by build.rs
|
||||
include!(concat!(env!("OUT_DIR"), "/proto_generated.rs"));
|
||||
// Include code generated by protogen
|
||||
// Note: to generate this, run generate.sh at the project root.
|
||||
include!("../generated/proto_generated.rs");
|
||||
|
|
Loading…
Add table
Reference in a new issue