use ffi::TF_SessionOptions;
use libc::size_t;
use std::ffi::CString;
use Result;
use buffer::Buffer;
use status::Status;
pub struct Options {
target: Option<CString>,
raw: *mut TF_SessionOptions,
}
impl Options {
pub fn new() -> Result<Self> {
Ok(Options { target: None, raw: nonnull!(ffi!(TF_NewSessionOptions())) })
}
pub fn configure(&mut self, configuration: &Buffer) -> Result<()> {
let status = try!(Status::new());
let configuration = configuration.as_ref();
ok!(ffi!(TF_SetConfig(self.raw, configuration.as_ptr() as *const _,
configuration.len() as size_t, status.as_raw())), &status);
Ok(())
}
pub fn target<T>(&mut self, target: T) where T: Into<String> {
let target = into_cstring!(target);
ffi!(TF_SetTarget(self.raw, target.as_ptr()));
self.target = Some(target);
}
#[doc(hidden)]
#[inline]
pub fn as_raw(&self) -> *mut TF_SessionOptions {
self.raw
}
}
impl Drop for Options {
#[inline]
fn drop(&mut self) {
ffi!(TF_DeleteSessionOptions(self.raw));
}
}