use crate::error::{check, Result};
use crate::generated::{Context, Instance, InstanceBuilder};
use crate::marshal;
use crate::object::Interface;
use crate::sys;
impl Instance {
pub fn new() -> Result<Instance> {
let builder = InstanceBuilder::new()?;
if let Ok(dir) = sys::native_library_directory() {
builder.set_module_path(&dir.to_string_lossy())?;
}
Instance::from_builder(&builder)
}
pub fn from_builder(builder: &InstanceBuilder) -> Result<Instance> {
let op = "daqInstance_createInstanceFromBuilder";
let mut out: *mut sys::daqInstance = std::ptr::null_mut();
let code = unsafe {
(sys::api().daqInstance_createInstanceFromBuilder)(&mut out, builder.as_raw() as *mut _)
};
check(code, op)?;
unsafe { marshal::require_object::<Instance>(out as *mut _, op) }
}
pub fn with_context(context: &Context, local_id: &str) -> Result<Instance> {
let op = "daqInstance_createInstance";
let __local_id = marshal::make_string(local_id)?;
let mut out: *mut sys::daqInstance = std::ptr::null_mut();
let code = unsafe {
(sys::api().daqInstance_createInstance)(
&mut out,
context.as_raw() as *mut _,
__local_id.as_ptr() as *mut _,
)
};
check(code, op)?;
unsafe { marshal::require_object::<Instance>(out as *mut _, op) }
}
}