4 releases
0.2.1 | Sep 14, 2024 |
---|---|
0.2.0 | Sep 14, 2024 |
0.1.6 | Apr 18, 2024 |
#1024 in Procedural macros
Used in 2 crates
(via e-utils)
22KB
102 lines
📄 中文 | 📄 English
⚡ what this ?
A Rust macros
Support app
APP |
Windows 10 |
Unix |
Macos |
---|---|---|---|
Json | √ |
√ |
√ |
C | √ |
√ |
√ |
_ | × |
× |
× |
✨ Features
📖 Example
[dependencies]
e-macros = "0.1"
#[derive(e_macros::C)]
struct B {
d: i32,
f: String,
}
fn test() -> Result<()> {
// 假设我们有一个T类型的实例
let value: B = B {
d: 1,
f: "test".to_string(),
};
let ptr = value.to_c_ptr();
// 还原*c_void指针为<Box<T>>实例
if let Some(restored_boxed_value) = unsafe { B::from_c_ptr(ptr) } {
// 成功还原Box<T>实例
println!("Restored value: {:?}", *restored_boxed_value);
} else {
// 还原过程中出现错误
println!("Failed to restore value");
}
Ok(())
}
智能写入Json
Example
#[derive(serde::Deserialize, Debug, serde::Serialize, Default, e_macros::Json)]
struct B {
d: i32,
f: String,
}
fn test() {
let mut b: B = B::default();
b.f = "test".to_string();
b.auto_write_json(Path::new("."), "test.json").unwrap();
let b = B::auto_read_json(Path::new("test.json")).unwrap();
println!("B {:?}", b);
}
智能读取Json
Example
#[derive(serde::Deserialize, Debug, serde::Serialize, Default, e_utils::Json)]
struct B {
d: i32,
f: String,
}
fn test() {
let mut b: B = B::default();
b.f = "test".to_string();
b.auto_write_json(Path::new("."), "test.json").unwrap();
let b = B::auto_read_json(Path::new("test.json")).unwrap();
println!("B {:?}", b);
}
安全地还原*const c_void指针为Box
Example
#[derive(e_utils::C)]
struct B {
d: i32,
f: String,
}
fn test() -> Result<()> {
// 假设我们有一个T类型的实例
let value: B = B {
d: 1,
f: "test".to_string(),
};
let ptr = value.to_c_ptr();
// 还原*c_void指针为<Box<T>>实例
if let Some(restored_boxed_value) = unsafe { B::from_c_ptr(ptr) } {
// 成功还原Box<T>实例
println!("Restored value: {:?}", *restored_boxed_value);
} else {
// 还原过程中出现错误
println!("Failed to restore value");
}
Ok(())
}
💡!important:
🚀 fast running
🦊 Applied Projects
🔭 why need to e-utils?
🙋 Reference items and materials
Dependencies
~225–670KB
~16K SLoC