Skip to content

Commit

Permalink
feat: create macro for easy code inclusion
Browse files Browse the repository at this point in the history
Provide a macro that makes inclusion of generates Rust source code
easier. Also, generate all files into a subfolder to avoid any
collisions with other generated files.
  • Loading branch information
dnaka91 committed Nov 5, 2023
1 parent eaa06ae commit 7ec3e09
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 27 deletions.
14 changes: 13 additions & 1 deletion crates/stef-build/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ pub enum Error {
#[source]
source: glob::GlobError,
},
#[error("failed creating output directory at {path:?}")]
Create {
#[source]
source: std::io::Error,
path: PathBuf,
},
#[error("failed reading schema file at {file:?}")]
Read {
#[source]
Expand Down Expand Up @@ -75,7 +81,13 @@ impl Compiler {
pub fn compile(&self, schemas: &[impl AsRef<str>]) -> Result<()> {
init_miette();

let out_dir = PathBuf::from(std::env::var_os("OUT_DIR").unwrap());
let out_dir = PathBuf::from(std::env::var_os("OUT_DIR").unwrap()).join("stef");

std::fs::create_dir_all(&out_dir).map_err(|source| Error::Create {
source,
path: out_dir.clone(),
})?;

let mut inputs = Vec::new();
let mut validated = Vec::new();

Expand Down
52 changes: 26 additions & 26 deletions crates/stef-playground/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,109 +4,109 @@
#![allow(clippy::missing_errors_doc)]

mod sample {
include!(concat!(env!("OUT_DIR"), "/sample.rs"));
stef::include!("sample");
}

mod schemas {
mod alias_basic {
include!(concat!(env!("OUT_DIR"), "/alias_basic.rs"));
stef::include!("alias_basic");
}

mod attribute_multi {
include!(concat!(env!("OUT_DIR"), "/attribute_multi.rs"));
stef::include!("attribute_multi");
}

mod attribute_single {
include!(concat!(env!("OUT_DIR"), "/attribute_single.rs"));
stef::include!("attribute_single");
}

mod attribute_unit {
include!(concat!(env!("OUT_DIR"), "/attribute_unit.rs"));
stef::include!("attribute_unit");
}

mod attributes_min_ws {
include!(concat!(env!("OUT_DIR"), "/attributes_min_ws.rs"));
stef::include!("attributes_min_ws");
}

mod attributes {
include!(concat!(env!("OUT_DIR"), "/attributes.rs"));
stef::include!("attributes");
}

mod const_basic {
include!(concat!(env!("OUT_DIR"), "/const_basic.rs"));
stef::include!("const_basic");
}

mod const_string {
include!(concat!(env!("OUT_DIR"), "/const_string.rs"));
stef::include!("const_string");
}

mod enum_basic {
include!(concat!(env!("OUT_DIR"), "/enum_basic.rs"));
stef::include!("enum_basic");
}

mod enum_generics {
include!(concat!(env!("OUT_DIR"), "/enum_generics.rs"));
stef::include!("enum_generics");
}

mod enum_many_ws {
include!(concat!(env!("OUT_DIR"), "/enum_many_ws.rs"));
stef::include!("enum_many_ws");
}

mod enum_min_ws {
include!(concat!(env!("OUT_DIR"), "/enum_min_ws.rs"));
stef::include!("enum_min_ws");
}

// TODO: implement imports
// mod import_basic {
// include!(concat!(env!("OUT_DIR"), "/import_basic.rs"));
// stef::include!("import_basic");
// }

mod module_basic {
include!(concat!(env!("OUT_DIR"), "/module_basic.rs"));
stef::include!("module_basic");
}

mod schema_basic {
include!(concat!(env!("OUT_DIR"), "/schema_basic.rs"));
stef::include!("schema_basic");
}

mod struct_basic {
include!(concat!(env!("OUT_DIR"), "/struct_basic.rs"));
stef::include!("struct_basic");
}

mod struct_generics {
include!(concat!(env!("OUT_DIR"), "/struct_generics.rs"));
stef::include!("struct_generics");
}

mod struct_many_ws {
include!(concat!(env!("OUT_DIR"), "/struct_many_ws.rs"));
stef::include!("struct_many_ws");
}

mod struct_min_ws {
include!(concat!(env!("OUT_DIR"), "/struct_min_ws.rs"));
stef::include!("struct_min_ws");
}

mod struct_tuple {
include!(concat!(env!("OUT_DIR"), "/struct_tuple.rs"));
stef::include!("struct_tuple");
}

mod types_basic {
include!(concat!(env!("OUT_DIR"), "/types_basic.rs"));
stef::include!("types_basic");
}

mod types_generic {
include!(concat!(env!("OUT_DIR"), "/types_generic.rs"));
stef::include!("types_generic");
}

mod types_nested {
include!(concat!(env!("OUT_DIR"), "/types_nested.rs"));
stef::include!("types_nested");
}

mod types_non_zero {
include!(concat!(env!("OUT_DIR"), "/types_non_zero.rs"));
stef::include!("types_non_zero");
}

mod types_ref {
include!(concat!(env!("OUT_DIR"), "/types_ref.rs"));
stef::include!("types_ref");
}
}

Expand Down
7 changes: 7 additions & 0 deletions crates/stef/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,13 @@ pub use buf::{Buf, BufMut, Bytes, Decode, Encode};
pub mod buf;
pub mod varint;

#[macro_export]
macro_rules! include {
($name:literal) => {
include!(concat!(env!("OUT_DIR"), "/stef/", $name, ".rs"));
};
}

#[derive(Clone, Debug, PartialEq)]
pub struct NonZero<T>(T);

Expand Down

0 comments on commit 7ec3e09

Please sign in to comment.