use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize)]
pub struct QueryValidationRequest {
pub query: String,
#[serde(default = "default_sparql_syntax")]
pub syntax: String,
#[serde(default = "default_true")]
pub include_algebra: bool,
#[serde(default = "default_true")]
pub include_optimized: bool,
}
pub fn default_sparql_syntax() -> String {
"sparql11".to_string()
}
pub fn default_true() -> bool {
true
}
#[derive(Debug, Clone, Serialize)]
pub struct QueryValidationResponse {
pub valid: bool,
pub input: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub formatted: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub query_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub algebra: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub algebra_optimized: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub variables: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prefixes: Option<Vec<PrefixMapping>>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub errors: Vec<ValidationError>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub warnings: Vec<ValidationWarning>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct UpdateValidationRequest {
pub update: String,
#[serde(default = "default_sparql_syntax")]
pub syntax: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct UpdateValidationResponse {
pub valid: bool,
pub input: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub formatted: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub operations: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub affected_graphs: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub errors: Vec<ValidationError>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub warnings: Vec<ValidationWarning>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct IriValidationRequest {
pub iris: Vec<String>,
#[serde(default = "default_true")]
pub check_relative: bool,
}
#[derive(Debug, Clone, Serialize)]
pub struct IriValidationResponse {
pub results: Vec<IriValidationResult>,
pub summary: ValidationSummary,
}
#[derive(Debug, Clone, Serialize)]
pub struct IriValidationResult {
pub iri: String,
pub valid: bool,
pub is_absolute: bool,
pub is_relative: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub scheme: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub errors: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub warnings: Vec<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct DataValidationRequest {
pub data: String,
#[serde(default = "default_format")]
pub format: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub base: Option<String>,
}
pub fn default_format() -> String {
"turtle".to_string()
}
#[derive(Debug, Clone, Serialize)]
pub struct DataValidationResponse {
pub valid: bool,
pub format: String,
pub triple_count: usize,
#[serde(skip_serializing_if = "Option::is_none")]
pub graph_count: Option<usize>,
pub subject_count: usize,
pub predicate_count: usize,
pub object_count: usize,
pub blank_node_count: usize,
pub literal_count: usize,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub errors: Vec<ValidationError>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub warnings: Vec<ValidationWarning>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub sample_triples: Vec<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct LangTagValidationRequest {
pub tags: Vec<String>,
}
#[derive(Debug, Clone, Serialize)]
pub struct LangTagValidationResponse {
pub results: Vec<LangTagValidationResult>,
pub summary: ValidationSummary,
}
#[derive(Debug, Clone, Serialize)]
pub struct LangTagValidationResult {
pub tag: String,
pub valid: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub script: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub region: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub variants: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub extensions: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub private_use: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub errors: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub warnings: Vec<String>,
}
#[derive(Debug, Clone, Serialize)]
pub struct ValidationError {
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub line: Option<usize>,
#[serde(skip_serializing_if = "Option::is_none")]
pub column: Option<usize>,
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
pub struct ValidationWarning {
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub line: Option<usize>,
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
pub struct PrefixMapping {
pub prefix: String,
pub iri: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct ValidationSummary {
pub total: usize,
pub valid: usize,
pub invalid: usize,
pub warnings: usize,
}
#[derive(Debug, Clone, Deserialize)]
pub struct QueryValidationParams {
pub query: Option<String>,
pub syntax: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct UpdateValidationParams {
pub update: Option<String>,
pub syntax: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct IriValidationParams {
pub iri: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct LangTagValidationParams {
pub tag: Option<String>,
}