7 个版本 (4 个重大更改)
0.5.0 | 2021年6月1日 |
---|---|
0.4.1 | 2021年6月1日 |
0.4.0 | 2019年10月17日 |
0.3.0 | 2019年6月20日 |
0.1.1 | 2019年6月4日 |
在 过程宏 中排名 #1819
在 2 crate 中使用
8KB
93 行
Drop struct macro derive
一个用于在FFI中使用的结构体的 derive 宏,以释放(删除)内存。
目前仅支持C字符串(以指针和长度字段表示)和数组。
示例
#[repr(C)]
#[derive(DropStructMacro)]
pub struct FFIStagedSectorMetadata {
pub sector_access: *const libc::c_char,
pub sector_id: u64,
pub pieces_len: libc::size_t,
pub pieces_ptr: *const FFIPieceMetadata,
// must be one of: Pending, Failed, Sealing
pub seal_status_code: FFISealStatus,
// if sealing failed - here's the error
pub seal_error_msg: *const libc::c_char,
}
将自动创建
impl Drop for FFIStagedSectorMetadata {
fn drop(&mut self) {
unsafe {
free_c_str(self.sector_access as *mut libc::c_char);
drop(Vec::from_raw_parts(
self.pieces_ptr as *mut FFIPieceMetadata,
self.pieces_len,
self.pieces_len,
));
free_c_str(self.seal_error_msg as *mut libc::c_char);
};
}
}
要查看宏应用后的生成输出,您可以使用 cargo-expand
$ cd filecoin-proofs
$ cargo expand --lib api::responses
Checking filecoin-proofs v0.1.0 (/home/vmx/src/pl/filecoin/rust-fil-proofs/filecoin-proofs)
Finished dev [unoptimized + debuginfo] target(s) in 0.70s
pub mod responses {
use crate::sector_builder::errors::SectorBuilderErr;
use crate::sector_builder::SectorBuilder;
use crate::API_POREP_PROOF_BYTES;
use drop_struct_macro_derive::DropStructMacro;
use failure::Error;
…
许可证
MIT 或 Apache 2.0
依赖项
~2MB
~46K SLoC