use anyhow::Result;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum SwrlAtom {
Class {
class_predicate: String,
argument: SwrlArgument,
},
IndividualProperty {
property_predicate: String,
argument1: SwrlArgument,
argument2: SwrlArgument,
},
DatavalueProperty {
property_predicate: String,
argument1: SwrlArgument,
argument2: SwrlArgument,
},
Builtin {
builtin_predicate: String,
arguments: Vec<SwrlArgument>,
},
SameIndividual {
argument1: SwrlArgument,
argument2: SwrlArgument,
},
DifferentIndividuals {
argument1: SwrlArgument,
argument2: SwrlArgument,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum SwrlArgument {
Variable(String),
Individual(String),
Literal(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SwrlRule {
pub id: String,
pub body: Vec<SwrlAtom>,
pub head: Vec<SwrlAtom>,
pub metadata: HashMap<String, String>,
}
#[derive(Debug, Clone)]
pub struct BuiltinFunction {
pub name: String,
pub namespace: String,
pub min_args: usize,
pub max_args: Option<usize>,
pub implementation: fn(&[SwrlArgument]) -> Result<bool>,
}
#[derive(Debug, Clone, Default)]
pub struct SwrlContext {
pub bindings: HashMap<String, SwrlArgument>,
pub trace: Vec<String>,
}