use crate::oxistore::result_set::*;
use oxigraph::model::vocab::xsd;
use oxigraph::model::*;
impl RdfCellValue {
fn new_cellvalue_from_term(
term: &Term,
) -> Result<Self, Box<dyn std::error::Error>> {
match term {
Term::NamedNode(iri) => {
return Ok(RdfCellValue::Node(iri.clone().into_string()));
}
Term::BlankNode(_bnode) => {
return Ok(RdfCellValue::Blank());
}
Term::Literal(literal) => match literal.datatype() {
xsd::INTEGER => {
let value_str = literal.value();
return Ok(RdfCellValue::Int(
value_str.parse::<i32>().unwrap(),
));
}
xsd::UNSIGNED_INT => {
let value_str = literal.value();
return match value_str.parse::<u32>() {
Ok(uint) => Ok(RdfCellValue::UnsignedInt(uint)),
Err(_) => Err(Box::from("Invalid uint")),
};
}
xsd::FLOAT => {
let value_str = literal.value();
return Ok(RdfCellValue::Float(
value_str.parse::<f64>().unwrap(),
));
}
xsd::STRING => {
return Ok(RdfCellValue::Text(literal.value().to_string()));
}
_ => {
return Ok(RdfCellValue::Text(literal.value().to_string()));
}
},
Term::Triple(_var) => {}
}
Ok(RdfCellValue::Blank())
}
}
impl RdfCell {
pub fn new_cell_from_value_term(
variable: &Variable,
term: &Term,
) -> Result<Self, Box<dyn std::error::Error>> {
Ok(RdfCell {
name: variable.clone().into_string(),
value: RdfCellValue::new_cellvalue_from_term(term).unwrap(),
})
}
}