use super::concepts::ConceptInstance;
use super::types::{ControlFlow, ErrorPath, LanguageId, SourceFile};
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct FileModel {
pub path: PathBuf,
pub language: LanguageId,
pub concepts: Vec<ConceptInstance>,
#[serde(default)]
pub control_flow: ControlFlow,
#[serde(default)]
pub error_paths: Vec<ErrorPath>,
#[serde(default)]
pub generated: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct LanguageModel {
pub language: LanguageId,
pub files: Vec<FileModel>,
}
impl LanguageModel {
pub fn new(language: LanguageId) -> Self {
Self {
language,
files: Vec::new(),
}
}
pub fn concepts(&self) -> impl Iterator<Item = (&FileModel, &ConceptInstance)> {
self.files
.iter()
.flat_map(|f| f.concepts.iter().map(move |c| (f, c)))
}
}
#[derive(Debug, Clone)]
pub struct ParseResult {
pub file: SourceFile,
pub ok: bool,
pub diagnostics: Vec<String>,
}