use crate::FfiApi;
use nsi_sys::*;
use std::{error::Error, ffi::c_char, os::raw::c_int};
pub type ApiImpl = LinkedApi;
#[derive(Debug)]
pub struct LinkedApi {}
impl LinkedApi {
#[inline]
pub fn new() -> Result<Self, Box<dyn Error>> {
let api = LinkedApi {};
#[cfg(feature = "output")]
super::register_output_drivers(&api);
Ok(api)
}
}
impl FfiApi for LinkedApi {
#[inline]
fn NSIBegin(&self, nparams: c_int, params: *const NSIParam) -> NSIContext {
unsafe { NSIBegin(nparams, params) }
}
#[inline]
fn NSIEnd(&self, ctx: NSIContext) {
unsafe { NSIEnd(ctx) };
}
#[inline]
fn NSICreate(
&self,
ctx: NSIContext,
handle: NSIHandle,
type_: *const c_char,
nparams: c_int,
params: *const NSIParam,
) {
unsafe { NSICreate(ctx, handle, type_, nparams, params) };
}
#[inline]
fn NSIDelete(
&self,
ctx: NSIContext,
handle: NSIHandle,
nparams: c_int,
params: *const NSIParam,
) {
unsafe { NSIDelete(ctx, handle, nparams, params) };
}
#[inline]
fn NSISetAttribute(
&self,
ctx: NSIContext,
object: NSIHandle,
nparams: c_int,
params: *const NSIParam,
) {
unsafe { NSISetAttribute(ctx, object, nparams, params) };
}
#[inline]
fn NSISetAttributeAtTime(
&self,
ctx: NSIContext,
object: NSIHandle,
time: f64,
nparams: c_int,
params: *const NSIParam,
) {
unsafe { NSISetAttributeAtTime(ctx, object, time, nparams, params) };
}
#[inline]
fn NSIDeleteAttribute(
&self,
ctx: NSIContext,
object: NSIHandle,
name: *const c_char,
) {
unsafe { NSIDeleteAttribute(ctx, object, name) };
}
#[inline]
fn NSIConnect(
&self,
ctx: NSIContext,
from: NSIHandle,
from_attr: *const c_char,
to: NSIHandle,
to_attr: *const c_char,
nparams: c_int,
params: *const NSIParam,
) {
unsafe {
NSIConnect(ctx, from, from_attr, to, to_attr, nparams, params)
};
}
#[inline]
fn NSIDisconnect(
&self,
ctx: NSIContext,
from: NSIHandle,
from_attr: *const c_char,
to: NSIHandle,
to_attr: *const c_char,
) {
unsafe { NSIDisconnect(ctx, from, from_attr, to, to_attr) };
}
#[inline]
fn NSIEvaluate(
&self,
ctx: NSIContext,
nparams: c_int,
params: *const NSIParam,
) {
unsafe { NSIEvaluate(ctx, nparams, params) };
}
#[inline]
fn NSIRenderControl(
&self,
ctx: NSIContext,
nparams: c_int,
params: *const NSIParam,
) {
unsafe { NSIRenderControl(ctx, nparams, params) };
}
#[cfg(feature = "output")]
#[inline]
fn DspyRegisterDriver(
&self,
driver_name: *const c_char,
p_open: ndspy_sys::PtDspyOpenFuncPtr,
p_write: ndspy_sys::PtDspyWriteFuncPtr,
p_close: ndspy_sys::PtDspyCloseFuncPtr,
p_query: ndspy_sys::PtDspyQueryFuncPtr,
) -> ndspy_sys::PtDspyError {
unsafe {
ndspy_sys::DspyRegisterDriver(
driver_name,
p_open,
p_write,
p_close,
p_query,
)
}
}
}