use crate::cassandra::error::*;
use crate::cassandra::util::{Protected, ProtectedInner};
use crate::cassandra_sys::cass_custom_payload_free;
use crate::cassandra_sys::cass_custom_payload_new;
use crate::cassandra_sys::cass_custom_payload_set_n;
use crate::cassandra_sys::CassCustomPayload as _CassCustomPayload;
use std::collections::HashMap;
use std::os::raw::c_char;
pub type CustomPayloadResponse = HashMap<String, Vec<u8>>;
#[derive(Debug)]
pub struct CustomPayload(*mut _CassCustomPayload);
unsafe impl Send for CustomPayload {}
unsafe impl Sync for CustomPayload {}
impl ProtectedInner<*mut _CassCustomPayload> for CustomPayload {
#[inline(always)]
fn inner(&self) -> *mut _CassCustomPayload {
self.0
}
}
impl Protected<*mut _CassCustomPayload> for CustomPayload {
fn build(inner: *mut _CassCustomPayload) -> Self {
if inner.is_null() {
panic!("Unexpected null pointer")
};
CustomPayload(inner)
}
}
impl Default for CustomPayload {
fn default() -> Self {
unsafe { CustomPayload(cass_custom_payload_new()) }
}
}
impl CustomPayload {
pub fn set(&self, name: String, value: &[u8]) -> Result<()> {
unsafe {
let name_ptr = name.as_ptr() as *const c_char;
cass_custom_payload_set_n(self.0, name_ptr, name.len(), value.as_ptr(), value.len());
Ok(())
}
}
}
impl Drop for CustomPayload {
fn drop(&mut self) {
unsafe { cass_custom_payload_free(self.0) }
}
}