use super::{NativeSsrBuildError, NativeSsrFileAnalysis, SsrFacts, build_ssr_file_decisions};
use crate::decision::DecisionTables;
use vize_l2::{
artifact::Artifact,
file::FileArtifact,
lang::js::{NativeScopedTemplateView, NativeTemplateFile},
};
pub struct NativeTemplateScopedSsrAnalysis<'owner, 'arena> {
view: NativeScopedTemplateView<'owner, 'arena>,
analysis: NativeSsrFileAnalysis<'owner, 'arena>,
}
impl<'owner, 'arena> NativeTemplateScopedSsrAnalysis<'owner, 'arena> {
#[must_use]
pub fn scoped(&self) -> &NativeScopedTemplateView<'owner, 'arena> {
&self.view
}
#[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 artifact(&self) -> &'owner Artifact<'arena> {
self.analysis.artifact()
}
#[must_use]
pub fn tables(&self) -> &DecisionTables {
self.analysis.tables()
}
#[must_use]
pub fn ssr(&self) -> Option<&SsrFacts<'owner, 'arena>> {
self.analysis.ssr()
}
}
pub fn build_native_scoped_ssr_file_decisions<'owner, 'arena>(
view: NativeScopedTemplateView<'owner, 'arena>,
) -> Result<NativeTemplateScopedSsrAnalysis<'owner, 'arena>, NativeSsrBuildError> {
let analysis = build_ssr_file_decisions(view.file()).map_err(NativeSsrBuildError::Decision)?;
Ok(NativeTemplateScopedSsrAnalysis { view, analysis })
}