use crate::bindings;
use aes_types::TaggedData;
use libc::{c_char, c_long};
pub type ESGetVersionFn = extern "C" fn () -> c_long;
pub type ESInitializeFn = extern "C" fn (data: *mut ExtendScriptData, count: c_long) -> *mut c_char;
pub type ESTerminateFn = extern "C" fn ();
#[repr(transparent)]
#[derive(Debug)]
pub struct ExtendScriptData(TaggedData);
impl ExtendScriptData {
pub fn new_undefined() -> Self {
Self(bindings::TaggedData::new_undefined())
}
pub fn new_string(s: &str) -> Self {
Self(bindings::TaggedData::new_string(s))
}
pub fn new_integer(val: i32) -> Self {
Self(bindings::TaggedData::new_integer(val))
}
pub fn new_bool(val: bool) -> Self {
Self(bindings::TaggedData::new_bool(val))
}
}
impl From<bindings::TaggedData> for ExtendScriptData {
fn from(data: bindings::TaggedData) -> Self {
Self(data)
}
}
impl From<ExtendScriptData> for bindings::TaggedData {
fn from(data: ExtendScriptData) -> Self {
data.0
}
}
pub(crate) fn to_raw_tagged_data(data: &ExtendScriptData) -> *mut bindings::TaggedData {
&data.0 as *const _ as *mut _
}
pub(crate) fn from_raw_tagged_data(ptr: *mut bindings::TaggedData) -> Option<&'static ExtendScriptData> {
if ptr.is_null() {
None
} else {
unsafe {
Some(&*(ptr as *const ExtendScriptData))
}
}
}
#[derive(Debug)]
pub enum Error {
InitializationFailed,
InvalidArguments,
ExecutionFailed,
}
pub type Result<T> = std::result::Result<T, Error>;