use error::{ErrorKind, Result};
use odpi::opaque::ODPIDeqOptions;
use odpi::{enums, externs};
use std::convert::TryFrom;
use std::ptr;
use util::ODPIStr;
#[derive(Clone)]
pub struct Options {
inner: *mut ODPIDeqOptions,
}
impl Options {
#[doc(hidden)]
pub fn inner(&self) -> *mut ODPIDeqOptions {
self.inner
}
pub fn get_condition(&self) -> Result<String> {
let mut res = ptr::null();
let mut res_len = 0;
try_dpi!(
externs::dpiDeqOptions_getCondition(self.inner, &mut res, &mut res_len),
{
let cond = if res.is_null() {
"".to_string()
} else {
let res_s = ODPIStr::new(res, res_len);
res_s.into()
};
Ok(cond)
},
ErrorKind::DeqOptions("dpiDeqOptions_getCondition".to_string())
)
}
pub fn get_consumer_name(&self) -> Result<String> {
let mut res = ptr::null();
let mut res_len = 0;
try_dpi!(
externs::dpiDeqOptions_getConsumerName(self.inner, &mut res, &mut res_len),
{
let consumer_name = if res.is_null() {
"".to_string()
} else {
let res_s = ODPIStr::new(res, res_len);
res_s.into()
};
Ok(consumer_name)
},
ErrorKind::DeqOptions("dpiDeqOptions_getConsumerName".to_string())
)
}
pub fn get_correlation(&self) -> Result<String> {
let mut res = ptr::null();
let mut res_len = 0;
try_dpi!(
externs::dpiDeqOptions_getCorrelation(self.inner, &mut res, &mut res_len),
{
let correlation = if res.is_null() {
"".to_string()
} else {
let res_s = ODPIStr::new(res, res_len);
res_s.into()
};
Ok(correlation)
},
ErrorKind::DeqOptions("dpiDeqOptions_getCorrelation".to_string())
)
}
pub fn get_mode(&self) -> Result<enums::ODPIDeqMode> {
let mut deq_mod_ptr = enums::ODPIDeqMode::Remove;
try_dpi!(
externs::dpiDeqOptions_getMode(self.inner, &mut deq_mod_ptr),
Ok(deq_mod_ptr),
ErrorKind::DeqOptions("dpiDeqOptions_getMode".to_string())
)
}
pub fn get_msg_id(&self) -> Result<String> {
let mut res = ptr::null();
let mut res_len = 0;
try_dpi!(
externs::dpiDeqOptions_getMsgId(self.inner, &mut res, &mut res_len),
{
let msg_id = if res.is_null() {
"".to_string()
} else {
let res_s = ODPIStr::new(res, res_len);
res_s.into()
};
Ok(msg_id)
},
ErrorKind::DeqOptions("dpiDeqOptions_getMsgId".to_string())
)
}
pub fn get_navigation(&self) -> Result<enums::ODPIDeqNavigation> {
let mut nav = enums::ODPIDeqNavigation::NextMsg;
try_dpi!(
externs::dpiDeqOptions_getNavigation(self.inner, &mut nav),
Ok(nav),
ErrorKind::DeqOptions("dpiDeqOptions_getNavigation".to_string())
)
}
pub fn get_transformation(&self) -> Result<String> {
let mut res = ptr::null();
let mut res_len = 0;
try_dpi!(
externs::dpiDeqOptions_getTransformation(self.inner, &mut res, &mut res_len),
{
let transformation = if res.is_null() {
"".to_string()
} else {
let res_s = ODPIStr::new(res, res_len);
res_s.into()
};
Ok(transformation)
},
ErrorKind::DeqOptions("dpiDeqOptions_getTransformation".to_string())
)
}
pub fn get_visibility(&self) -> Result<enums::ODPIVisibility> {
let mut visibility = enums::ODPIVisibility::OnCommit;
try_dpi!(
externs::dpiDeqOptions_getVisibility(self.inner, &mut visibility),
Ok(visibility),
ErrorKind::DeqOptions("dpiDeqOptions_getVisibility".to_string())
)
}
pub fn get_wait(&self) -> Result<u32> {
let mut wait = 0;
try_dpi!(
externs::dpiDeqOptions_getWait(self.inner, &mut wait),
Ok(wait),
ErrorKind::DeqOptions("dpiDeqOptions_getWait".to_string())
)
}
pub fn set_condition(&self, condition: Option<&str>) -> Result<()> {
let cond_s: ODPIStr = TryFrom::try_from(condition)?;
try_dpi!(
externs::dpiDeqOptions_setCondition(self.inner, cond_s.ptr(), cond_s.len()),
Ok(()),
ErrorKind::DeqOptions("dpiDeqOptions_setCondition".to_string())
)
}
pub fn set_consumer_name(&self, cosumer_name: Option<&str>) -> Result<()> {
let cons_s: ODPIStr = TryFrom::try_from(cosumer_name)?;
try_dpi!(
externs::dpiDeqOptions_setConsumerName(self.inner, cons_s.ptr(), cons_s.len()),
Ok(()),
ErrorKind::DeqOptions("dpiDeqOptions_setConsumerName".to_string())
)
}
pub fn set_correlation(&self, correlation: Option<&str>) -> Result<()> {
let corr_s: ODPIStr = TryFrom::try_from(correlation)?;
try_dpi!(
externs::dpiDeqOptions_setCorrelation(self.inner, corr_s.ptr(), corr_s.len()),
Ok(()),
ErrorKind::DeqOptions("dpiDeqOptions_setCorrelation".to_string())
)
}
pub fn set_mode(&self, mode: enums::ODPIDeqMode) -> Result<()> {
try_dpi!(
externs::dpiDeqOptions_setMode(self.inner, mode),
Ok(()),
ErrorKind::DeqOptions("dpiDeqOptions_setMode".to_string())
)
}
pub fn set_msg_id(&self, msg_id: Option<&str>) -> Result<()> {
let msg_id_s: ODPIStr = TryFrom::try_from(msg_id)?;
try_dpi!(
externs::dpiDeqOptions_setMsgId(self.inner, msg_id_s.ptr(), msg_id_s.len()),
Ok(()),
ErrorKind::DeqOptions("dpiDeqOptions_setMsgId".to_string())
)
}
pub fn set_navigation(&self, nav: enums::ODPIDeqNavigation) -> Result<()> {
try_dpi!(
externs::dpiDeqOptions_setNavigation(self.inner, nav),
Ok(()),
ErrorKind::DeqOptions("dpiDeqOptions_setNavigation".to_string())
)
}
pub fn set_transformation(&self, transform: Option<&str>) -> Result<()> {
let transform_s: ODPIStr = TryFrom::try_from(transform)?;
try_dpi!(
externs::dpiDeqOptions_setTransformation(
self.inner,
transform_s.ptr(),
transform_s.len()
),
Ok(()),
ErrorKind::DeqOptions("dpiDeqOptions_setTransformation".to_string())
)
}
pub fn set_visibility(&self, visibility: enums::ODPIVisibility) -> Result<()> {
try_dpi!(
externs::dpiDeqOptions_setVisibility(self.inner, visibility),
Ok(()),
ErrorKind::DeqOptions("dpiDeqOptions_setVisibility".to_string())
)
}
pub fn set_wait(&self, wait: u32) -> Result<()> {
try_dpi!(
externs::dpiDeqOptions_setWait(self.inner, wait),
Ok(()),
ErrorKind::DeqOptions("dpiDeqOptions_setWait".to_string())
)
}
}
impl From<*mut ODPIDeqOptions> for Options {
fn from(inner: *mut ODPIDeqOptions) -> Self {
Self { inner }
}
}
impl Drop for Options {
fn drop(&mut self) {
if !self.inner.is_null() {
unsafe {
externs::dpiDeqOptions_release(self.inner);
}
}
}
}