ergo_lib_c_core/
data_input.rs

1//! DataInput type
2
3use ergo_lib::chain;
4
5use crate::{
6    ergo_box::{BoxId, BoxIdPtr, ConstBoxIdPtr},
7    util::{const_ptr_as_ref, mut_ptr_as_mut},
8    Error,
9};
10
11/// Inputs, that are used to enrich script context, but won't be spent by the transaction
12#[derive(PartialEq, Eq, Debug, Clone)]
13pub struct DataInput(pub chain::transaction::DataInput);
14pub type DataInputPtr = *mut DataInput;
15pub type ConstDataInputPtr = *const DataInput;
16
17/// Parse box id (32 byte digest)
18pub unsafe fn data_input_new(
19    box_id_ptr: ConstBoxIdPtr,
20    data_input_out: *mut DataInputPtr,
21) -> Result<(), Error> {
22    let box_id = const_ptr_as_ref(box_id_ptr, "box_id_ptr")?;
23    let data_input_out = mut_ptr_as_mut(data_input_out, "data_input_out")?;
24    *data_input_out = Box::into_raw(Box::new(DataInput(chain::transaction::DataInput {
25        box_id: box_id.0,
26    })));
27    Ok(())
28}
29
30/// Get box id
31pub unsafe fn data_input_box_id(
32    data_input_ptr: ConstDataInputPtr,
33    box_id_out: *mut BoxIdPtr,
34) -> Result<(), Error> {
35    let box_id_out = mut_ptr_as_mut(box_id_out, "box_id_out")?;
36    let data_input = const_ptr_as_ref(data_input_ptr, "data_input_ptr")?;
37    let box_id = BoxId(data_input.0.box_id);
38    *box_id_out = Box::into_raw(Box::new(box_id));
39    Ok(())
40}