use super::{NativeVaporFileAnalysis, VaporFacts};
use crate::decision::{DecisionBuildError, DecisionTables};
use vize_l2::{
artifact::Artifact,
file::FileArtifact,
lang::js::{NativeTemplateFile, NativeTemplateView},
};
pub struct NativeTemplateVaporAnalysis<'owner, 'arena> {
view: NativeTemplateView<'owner, 'arena>,
analysis: NativeVaporFileAnalysis<'owner, 'arena>,
}
impl<'owner, 'arena> NativeTemplateVaporAnalysis<'owner, 'arena> {
#[must_use]
pub fn owner(&self) -> &'owner NativeTemplateFile<'arena> {
self.view.owner()
}
#[must_use]
pub fn file(&self) -> &'owner FileArtifact<'arena> {
self.analysis.file()
}
#[must_use]
pub fn original_attributes(
&self,
) -> Option<&crate::decision::OriginalAttributeFacts<'owner, 'arena>> {
self.analysis.original_attributes()
}
#[must_use]
pub fn artifact(&self) -> &'owner Artifact<'arena> {
self.analysis.artifact()
}
#[must_use]
pub fn tables(&self) -> &DecisionTables {
self.analysis.tables()
}
#[must_use]
pub fn vapor(&self) -> Option<&VaporFacts<'owner, 'arena>> {
self.analysis.vapor()
}
}
pub fn build_native_vapor_file_decisions<'owner, 'arena>(
view: NativeTemplateView<'owner, 'arena>,
) -> Result<NativeTemplateVaporAnalysis<'owner, 'arena>, DecisionBuildError> {
let file = view.file().ok_or(DecisionBuildError::IncompleteFile)?;
let analysis = super::file::build_original_file_decisions(file)?;
Ok(NativeTemplateVaporAnalysis { view, analysis })
}