chore: ffi prelude to avoid dupe types, makefile entries for bindings

This commit is contained in:
rymnc
2024-07-05 18:13:02 +05:30
parent 149f5d5aca
commit fc7e9cf510
5 changed files with 46 additions and 28 deletions

3
.gitignore vendored
View File

@@ -1 +1,4 @@
/target
expanded.rs
stealth_address_kit.h
stealth_address_kit.nim

View File

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

View File

@@ -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<SerializationError> 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<T> {
value: T,
err_code: CErrorCode,
}
paste! {
#[repr(C)]
#[derive(Debug)]

30
sdk/src/ffi_prelude.rs Normal file
View File

@@ -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<SerializationError> 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<T> {
pub(crate) value: T,
pub(crate) err_code: CErrorCode,
}

View File

@@ -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")))]