use crate::Batch;
use crate::SparqlStatement;
use glib::{prelude::*, translate::*};
#[derive(Debug)]
#[non_exhaustive]
pub enum StatementValue {
String(String),
Integer(i64),
Double(f64),
Boolean(bool),
DateTime(glib::DateTime),
}
impl StatementValue {
#[cfg(feature = "v3_5")]
#[cfg_attr(docsrs, doc(cfg(feature = "v3_5")))]
fn to_value(&self) -> glib::Value {
use StatementValue::*;
match self {
String(v) => v.to_value(),
Integer(v) => v.to_value(),
Double(v) => v.to_value(),
Boolean(v) => v.to_value(),
DateTime(v) => v.to_value(),
}
}
}
pub trait BatchExtManual {
#[cfg(feature = "v3_5")]
#[cfg_attr(docsrs, doc(cfg(feature = "v3_5")))]
#[doc(alias = "tracker_batch_add_statement")]
fn add_statement(&self, stmt: &SparqlStatement, parameters: &[(&str, &StatementValue)]);
}
impl BatchExtManual for Batch {
#[cfg(feature = "v3_5")]
#[cfg_attr(docsrs, doc(cfg(feature = "v3_5")))]
fn add_statement(&self, stmt: &SparqlStatement, parameters: &[(&str, &StatementValue)]) {
let mut variable_names = vec![];
let mut values = vec![];
for t in parameters {
variable_names.push(t.0);
values.push(t.1.to_value());
}
unsafe {
ffi::tracker_batch_add_statementv(
self.to_glib_none().0,
stmt.to_glib_none().0,
parameters.len() as u32,
variable_names.as_slice().to_glib_none().0,
ToGlibContainerFromSlice::to_glib_none_from_slice(&values).0,
);
}
}
}