diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-02-11 21:44:05 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-02-11 21:44:05 +0800 |
| commit | 762e3119401fbee25ec18fee2ff220d9b12d48e8 (patch) | |
| tree | 26dee88ae37f7d184b693a1a97dad0c89fd0db66 /systems/_asset/macros | |
| parent | 2f10e0d94c61916dd36a03df2576223b135b6ccd (diff) | |
Add sheet system and reorganize workspace
- Add new "sheet" crate to workspace
- Rename "systems/asset" to "systems/_asset"
- Reorder workspace members and dependencies for clarity
- Update constants with new paths for auth and rules
- Add conditional compilation for system module
Diffstat (limited to 'systems/_asset/macros')
| -rw-r--r-- | systems/_asset/macros/Cargo.toml | 13 | ||||
| -rw-r--r-- | systems/_asset/macros/src/lib.rs | 43 |
2 files changed, 56 insertions, 0 deletions
diff --git a/systems/_asset/macros/Cargo.toml b/systems/_asset/macros/Cargo.toml new file mode 100644 index 0000000..d4142f2 --- /dev/null +++ b/systems/_asset/macros/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "asset_macros" +version.workspace = true +edition = "2024" + +[lib] +proc-macro = true + +[dependencies] +string_proc = { path = "../../../utils/string_proc" } +syn = { version = "2.0", features = ["full", "extra-traits"] } +quote = "1.0" +proc-macro2 = "1.0" diff --git a/systems/_asset/macros/src/lib.rs b/systems/_asset/macros/src/lib.rs new file mode 100644 index 0000000..1535af0 --- /dev/null +++ b/systems/_asset/macros/src/lib.rs @@ -0,0 +1,43 @@ +use proc_macro::TokenStream; +use quote::quote; +use string_proc::snake_case; +use syn::parse_macro_input; + +#[proc_macro_derive(RWDataTest)] +pub fn rw_data_test_derive(input: TokenStream) -> TokenStream { + let input = parse_macro_input!(input as syn::DeriveInput); + let name = &input.ident; + let test_mod_name = syn::Ident::new( + &format!("{}_rw_test", snake_case!(name.to_string())), + name.span(), + ); + + let expanded = quote! { + #[cfg(test)] + mod #test_mod_name { + use super::*; + use asset_system::rw::RWData; + + #[tokio::test] + async fn test() { + let temp_dir = std::env::current_dir().unwrap().join(".temp/"); + tokio::fs::create_dir_all(&temp_dir) + .await + .expect("Create dir failed!"); + let temp_file = temp_dir.join(stringify!(#name)); + + #name::write(#name::test_data(), &temp_file) + .await + .expect("Write test data failed!"); + + let read_data = #name::read(&temp_file) + .await + .expect("Re-read data failed!"); + + assert!(#name::verify_data(#name::test_data(), read_data)); + } + } + }; + + TokenStream::from(expanded) +} |
