use std::path::PathBuf;
use crate::diagnostics::{Diagnostic, DiagnosticCatalogEntry};
#[derive(Debug)]
pub struct WorkspaceInspection {
pub root: PathBuf,
pub environments: Vec<String>,
pub qualifiers: Vec<QualifierInspection>,
pub variables: Vec<VariableInspection>,
}
#[derive(Clone, Debug)]
pub struct QualifierInspection {
pub id: String,
pub uri: String,
pub path: PathBuf,
}
#[derive(Clone, Debug)]
pub struct VariableInspection {
pub id: String,
pub uri: String,
pub path: PathBuf,
}
#[derive(Debug)]
pub struct QualifierConfig {
pub id: String,
pub uri: String,
pub path: PathBuf,
pub value: serde_json::Value,
}
#[derive(Debug)]
pub struct VariableConfig {
pub id: String,
pub uri: String,
pub path: PathBuf,
pub value: serde_json::Value,
}
#[derive(Debug)]
pub struct WorkspaceLint {
pub root: PathBuf,
pub diagnostics: Vec<Diagnostic>,
}
#[derive(Debug)]
pub struct QualifierLint {
pub root: PathBuf,
pub id: String,
pub diagnostics: Vec<Diagnostic>,
}
#[derive(Debug)]
pub struct VariableLint {
pub root: PathBuf,
pub id: String,
pub diagnostics: Vec<Diagnostic>,
}
#[derive(Debug, serde::Serialize)]
pub struct QualifierResolution {
pub id: String,
pub value: bool,
}
#[derive(Debug, serde::Serialize)]
pub struct VariableResolution {
pub id: String,
pub environment: String,
pub value_key: String,
pub value: serde_json::Value,
}
#[derive(Clone, Debug)]
pub struct VariableResolutionTrace {
pub id: String,
pub requested_environment: String,
pub environment_block: String,
pub environment_fallback: bool,
pub rules: Vec<VariableRuleResolutionTrace>,
pub default_value: Option<String>,
pub selected_value: String,
pub selected_by: VariableSelectionTrace,
}
#[derive(Clone, Debug)]
pub struct VariableRuleResolutionTrace {
pub index: usize,
pub qualifier: String,
pub description: Option<String>,
pub value: Option<String>,
pub qualifier_value: bool,
pub selected: bool,
pub qualifier_trace: QualifierResolutionTrace,
}
#[derive(Clone, Debug)]
pub enum VariableSelectionTrace {
Rule { index: usize, qualifier: String },
Default,
}
#[derive(Clone, Debug)]
pub struct QualifierResolutionTrace {
pub id: String,
pub description: Option<String>,
pub cached: bool,
pub predicates: Vec<PredicateResolutionTrace>,
pub value: bool,
}
#[derive(Clone, Debug)]
pub struct PredicateResolutionTrace {
pub index: usize,
pub attribute: String,
pub op: String,
pub description: Option<String>,
pub expected: Option<serde_json::Value>,
pub actual: PredicateActualTrace,
pub value: bool,
}
#[derive(Clone, Debug)]
pub enum PredicateActualTrace {
Context {
path: String,
value: Option<serde_json::Value>,
},
Qualifier {
id: String,
trace: Box<QualifierResolutionTrace>,
},
Bucket {
path: String,
value: Option<serde_json::Value>,
salt: String,
start: i64,
end: i64,
bucket: Option<u16>,
},
}
#[derive(Debug)]
pub struct DiagnosticCatalog {
pub scope: DiagnosticCatalogScope,
pub subject: String,
pub diagnostics: Vec<DiagnosticCatalogEntry>,
}
#[derive(Debug, serde::Serialize)]
#[serde(rename_all = "lowercase")]
pub enum DiagnosticCatalogScope {
Global,
Workspace,
}