Crates.io | drop_struct_macro_derive |
lib.rs | drop_struct_macro_derive |
version | 0.5.0 |
source | src |
created_at | 2019-06-04 12:11:44.436093 |
updated_at | 2021-06-01 23:03:54.827121 |
description | A derive macro to free (drop) memory for structs that are used in the FFI. |
homepage | |
repository | https://github.com/filecoin-project/rust-fil-proofs |
max_upload_size | |
id | 138870 |
size | 19,110 |
A derive macro to free (drop) memory for structs that are used in the FFI.
Currently only c-strings (libc::c_char
) and arrays (represented as a pointer and a length field) are supported.
Example:
#[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,
}
Will automatically create:
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);
};
}
}
To view the generated output after the macro was applied, you can use 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 or Apache 2.0