#![allow(non_camel_case_types)]
#![allow(dead_code)]
#![allow(missing_copy_implementations)]
use cassandra::batch::Batch;
use cassandra::cluster::Cluster;
use cassandra::result::CassResult;
use cassandra::future::CassFuture;
use cassandra::metrics::SessionMetrics;
use cassandra::schema::schema_meta::SchemaMeta;
use cassandra::statement::Statement;
use cassandra::prepared::PreparedStatement;
use cassandra::util::Protected;
use cassandra::error::*;
use cassandra_sys::CassSession as _Session;
use cassandra_sys::cass_session_close;
use cassandra_sys::cass_session_connect;
use cassandra_sys::cass_session_connect_keyspace;
use cassandra_sys::cass_session_execute;
use cassandra_sys::cass_session_execute_batch;
use cassandra_sys::cass_session_free;
use cassandra_sys::cass_session_get_metrics;
use cassandra_sys::cass_session_get_schema_meta;
use cassandra_sys::cass_session_new;
use cassandra_sys::cass_session_prepare;
use std::ffi::CString;
use std::ffi::NulError;
use std::mem;
#[derive(Debug)]
pub struct Session(pub *mut _Session);
unsafe impl Send for Session {}
unsafe impl Sync for Session {}
impl Protected<*mut _Session> for Session {
fn inner(&self) -> *mut _Session { self.0 }
fn build(inner: *mut _Session) -> Self { if inner.is_null() { panic!("Unexpected null pointer") }; Session(inner) }
}
impl Drop for Session {
fn drop(&mut self) {
unsafe { cass_session_free(self.0) }
}
}
impl Default for Session {
fn default() -> Session { Session::new() }
}
impl Session {
pub fn new() -> Session { unsafe { Session(cass_session_new()) } }
pub fn connect(self, cluster: &Cluster) -> CassFuture<()> {
unsafe { <CassFuture<()>>::build(cass_session_connect(self.0, cluster.inner())) }
}
pub fn connect_keyspace(&self, cluster: &Cluster, keyspace: &str) -> Result<CassFuture<()>> {
unsafe {
let keyspace_cstr = CString::new(keyspace)?;
Ok(<CassFuture<()>>::build(
cass_session_connect_keyspace(self.0, cluster.inner(), keyspace_cstr.as_ptr())))
}
}
pub fn close(self) -> CassFuture<()> { unsafe { <CassFuture<()>>::build(cass_session_close(self.0)) } }
pub fn prepare(&self, query: &str) -> Result<CassFuture<PreparedStatement>> {
unsafe {
let query_cstr = CString::new(query)?;
Ok(<CassFuture<PreparedStatement>>::build(
cass_session_prepare(self.0, query_cstr.as_ptr())))
}
}
pub fn execute_batch(&self, batch: Batch) -> CassFuture<CassResult> {
<CassFuture<CassResult>>::build(unsafe { cass_session_execute_batch(self.0, batch.inner()) })
}
pub fn execute(&self, statement: &Statement) -> CassFuture<CassResult> {
unsafe { <CassFuture<CassResult>>::build(cass_session_execute(self.0, statement.inner())) }
}
pub fn get_schema_meta(&self) -> SchemaMeta { unsafe { SchemaMeta::build(cass_session_get_schema_meta(self.0)) } }
pub fn get_metrics(&self) -> SessionMetrics {
unsafe {
let mut metrics = mem::zeroed();
cass_session_get_metrics(self.0, &mut metrics);
SessionMetrics::build(&metrics)
}
}
}