#macro-derive #drop #free #structs #memory #field #filecoin

drop_struct_macro_derive

一个用于在FFI中使用的结构体的 derive 宏,以释放(删除)内存。

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 中使用

MIT/Apache

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