Files
sfera/rust/crates/bsl-parser/src/models.rs
T
2026-05-16 19:03:49 +03:00

60 lines
1.5 KiB
Rust

use serde::Serialize;
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct SourceRange {
pub line_start: usize,
pub line_end: usize,
pub column_start: usize,
pub column_end: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct ParsedProcedure {
pub name: String,
pub export: bool,
pub is_function: bool,
pub parameters: Vec<String>,
pub source_range: SourceRange,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct ParsedCall {
pub caller: String,
pub callee: String,
pub source_range: SourceRange,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct ParsedQuery {
pub owner_procedure: String,
pub query_text: String,
pub tables: Vec<String>,
pub source_range: SourceRange,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct ParsedWrite {
pub owner_procedure: String,
pub target: String,
pub write_type: String,
pub source_range: SourceRange,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct ParseDiagnostic {
pub code: String,
pub message: String,
pub severity: String,
pub source_range: Option<SourceRange>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct ParsedSemanticUnit {
pub source_path: String,
pub procedures: Vec<ParsedProcedure>,
pub calls: Vec<ParsedCall>,
pub queries: Vec<ParsedQuery>,
pub writes: Vec<ParsedWrite>,
pub diagnostics: Vec<ParseDiagnostic>,
}