diff --git a/.gitignore b/.gitignore index ea8c4bf..ce4440d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ /target +expanded.rs +stealth_address_kit.h +stealth_address_kit.nim diff --git a/Makefile b/Makefile index 8fda6c3..ffd7d40 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ .PHONY: deps clean example deps: @cargo install cross --git https://github.com/cross-rs/cross.git --rev 1511a28 + @cargo install cbindgen clean: @cargo clean @@ -11,3 +12,11 @@ example: bench: @cargo bench --all-features cp -r target/criterion/** benchmarks/ + +generate_c_bindings: + @cargo expand --all-features -p stealth_address_kit > expanded.rs + @cbindgen --output stealth_address_kit.h --lang c expanded.rs + +generate_nim_bindings: + @cargo expand --all-features -p stealth_address_kit > expanded.rs + @nbindgen --output stealth_address_kit.nim expanded.rs diff --git a/sdk/src/ffi.rs b/sdk/src/ffi.rs index 34aff9e..e02117f 100644 --- a/sdk/src/ffi.rs +++ b/sdk/src/ffi.rs @@ -5,35 +5,8 @@ macro_rules! define_curve_ffi { use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, SerializationError}; use num_traits::Zero; use std::ops::Add; + use crate::ffi_prelude::{CReturn, CErrorCode}; - #[repr(C)] - #[derive(Debug, PartialOrd, PartialEq)] - pub enum CErrorCode { - NoError = 0, - SerializationErrorNotEnoughSpace = 1, - SerializationErrorInvalidData = 2, - SerializationErrorUnexpectedFlags = 3, - SerializationErrorIoError = 4, - InvalidKeys = 5, - } - - impl From for CErrorCode { - fn from(value: SerializationError) -> Self { - match value { - SerializationError::NotEnoughSpace => CErrorCode::SerializationErrorNotEnoughSpace, - SerializationError::InvalidData => CErrorCode::SerializationErrorInvalidData, - SerializationError::UnexpectedFlags => CErrorCode::SerializationErrorUnexpectedFlags, - SerializationError::IoError(_) => CErrorCode::SerializationErrorIoError, - } - } - } - - #[repr(C)] - #[derive(Debug)] - pub struct CReturn { - value: T, - err_code: CErrorCode, - } paste! { #[repr(C)] #[derive(Debug)] diff --git a/sdk/src/ffi_prelude.rs b/sdk/src/ffi_prelude.rs new file mode 100644 index 0000000..b435677 --- /dev/null +++ b/sdk/src/ffi_prelude.rs @@ -0,0 +1,30 @@ +use ark_serialize::SerializationError; + +#[repr(C)] +#[derive(Debug, PartialOrd, PartialEq)] +pub enum CErrorCode { + NoError = 0, + SerializationErrorNotEnoughSpace = 1, + SerializationErrorInvalidData = 2, + SerializationErrorUnexpectedFlags = 3, + SerializationErrorIoError = 4, + InvalidKeys = 5, +} + +impl From for CErrorCode { + fn from(value: SerializationError) -> Self { + match value { + SerializationError::NotEnoughSpace => CErrorCode::SerializationErrorNotEnoughSpace, + SerializationError::InvalidData => CErrorCode::SerializationErrorInvalidData, + SerializationError::UnexpectedFlags => CErrorCode::SerializationErrorUnexpectedFlags, + SerializationError::IoError(_) => CErrorCode::SerializationErrorIoError, + } + } +} + +#[repr(C)] +#[derive(Debug)] +pub struct CReturn { + pub(crate) value: T, + pub(crate) err_code: CErrorCode, +} diff --git a/sdk/src/lib.rs b/sdk/src/lib.rs index 3cac962..368166e 100644 --- a/sdk/src/lib.rs +++ b/sdk/src/lib.rs @@ -34,6 +34,9 @@ mod vesta_impl; #[cfg(feature = "ffi")] #[cfg_attr(docsrs, doc(cfg(feature = "ffi")))] mod ffi; +#[cfg(feature = "ffi")] +#[cfg_attr(docsrs, doc(cfg(feature = "ffi")))] +mod ffi_prelude; #[cfg(feature = "baby_jub_jub")] #[cfg_attr(docsrs, doc(cfg(feature = "baby_jub_jub")))]