drop_struct_macro_derive 0.4.1

A derive macro to free (drop) memory for structs that are used in the FFI.
Documentation
# Drop struct macro derive

> 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:

```rust
#[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:

```rust
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](https://github.com/dtolnay/cargo-expand):

```console
$ 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;
…
```

## License

MIT or Apache 2.0