4 releases

0.2.1 Sep 14, 2024
0.2.0 Sep 14, 2024
0.1.6 Apr 18, 2024

#1009 in Procedural macros


Used in 2 crates (via e-utils)

Custom license

22KB
102 lines

e-macros

📄 中文 | 📄 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

~230–670KB
~16K SLoC