Macros for manifest file list
Why not amiright.
This commit is contained in:
parent
30d241ea4e
commit
472d7c923a
3
Cargo.lock
generated
3
Cargo.lock
generated
|
@ -29,8 +29,11 @@ name = "infra-rs"
|
|||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"k8s-openapi",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
11
Cargo.toml
11
Cargo.toml
|
@ -3,7 +3,18 @@ name = "infra-rs"
|
|||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[lib]
|
||||
proc-macro = true
|
||||
|
||||
[dependencies]
|
||||
k8s-openapi = { version = "0.22.0", features = ["v1_30"] }
|
||||
proc-macro2 = "1.0.86"
|
||||
quote = "1.0.36"
|
||||
serde = { version = "1.0.203", features = ["derive"] }
|
||||
serde_json = "1.0.120"
|
||||
syn = "2.0.68"
|
||||
|
||||
[profile.release]
|
||||
lto = true
|
||||
strip = true
|
||||
codegen-units = 1
|
||||
|
|
29
src/lib.rs
Normal file
29
src/lib.rs
Normal file
|
@ -0,0 +1,29 @@
|
|||
use std::fs;
|
||||
|
||||
use quote::quote;
|
||||
|
||||
#[proc_macro]
|
||||
pub fn manifest_list(dir: proc_macro::TokenStream) -> proc_macro::TokenStream {
|
||||
let dir = dir.to_string();
|
||||
let dir = dir.trim_matches('"');
|
||||
let paths: Vec<String> = fs::read_dir(dir).unwrap().filter_map(|entry| {
|
||||
let path = entry.ok()?.path();
|
||||
if path.is_file() && path.file_name()?.to_str() != Some("mod.rs") {
|
||||
path.file_name()?.to_str().map(|s| s.to_owned().replace(".rs", ""))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}).collect();
|
||||
|
||||
// Generate the output tokens
|
||||
let paths: Vec<proc_macro2::TokenStream> = paths.iter().map(|path| {
|
||||
let ident = syn::Ident::new(path, proc_macro2::Span::call_site());
|
||||
quote! { #ident::render() }
|
||||
}).collect();
|
||||
|
||||
let gen = quote! {
|
||||
vec![#(#paths),*].into_iter().flatten().collect()
|
||||
};
|
||||
|
||||
gen.into()
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
use infra_rs::manifest_list;
|
||||
|
||||
use crate::infra_rs::ResourceList;
|
||||
|
||||
mod vaultwarden;
|
||||
|
||||
pub fn render() -> ResourceList {
|
||||
let resources = vec![vaultwarden::render()].into_iter().flatten().collect();
|
||||
let resources = manifest_list!("./src/manifests");
|
||||
|
||||
ResourceList {
|
||||
items: resources,
|
||||
|
|
|
@ -3,7 +3,7 @@ use serde_json::Value;
|
|||
use crate::infra_rs::{
|
||||
deployment::{self, Deployment, DeploymentEnv},
|
||||
ingress::{self, Ingress},
|
||||
service::{self, Service},
|
||||
service,
|
||||
Resource,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue