use super::VueReadKind;
use vize_l2::{
file::{BindingRef, vue::VueExposure},
resolution::{Occurrence, Usage},
};
pub(in crate::decision) trait FileReads<'owner, 'arena> {
const RECORD: bool;
fn classify(
&self,
occurrence: &Occurrence<'arena>,
binding: BindingRef<'owner, 'arena>,
) -> Option<VueReadKind>;
}
pub(in crate::decision) struct NoReads;
impl<'owner, 'arena> FileReads<'owner, 'arena> for NoReads {
const RECORD: bool = false;
fn classify(
&self,
_: &Occurrence<'arena>,
_: BindingRef<'owner, 'arena>,
) -> Option<VueReadKind> {
None
}
}
pub(super) struct ExposureReads<'view, 'owner, 'descriptor, 'program, 'arena>(
pub(super) &'view VueExposure<'owner, 'descriptor, 'program, 'arena>,
);
impl<'owner, 'arena> FileReads<'owner, 'arena> for ExposureReads<'_, 'owner, '_, '_, 'arena> {
const RECORD: bool = true;
fn classify(
&self,
occurrence: &Occurrence<'arena>,
binding: BindingRef<'owner, 'arena>,
) -> Option<VueReadKind> {
(occurrence.usage == Usage::Read && self.0.binding(binding).is_ok())
.then_some(VueReadKind::SetupLet)
}
}