use serde::{Deserialize, Deserializer, Serialize};
use super::builder::ResolutionReportLimits;
use super::definition::SymbolDefinition;
use super::record::ResolutionRecord;
use super::reference::SymbolReference;
use super::unit::ResolutionUnit;
#[derive(Serialize, Deserialize, Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[serde(rename_all = "snake_case")]
pub enum ResolutionTier {
Syntactic,
Semantic,
}
#[derive(Serialize, Clone, Debug, PartialEq, Eq)]
pub struct ResolutionReport {
tier: ResolutionTier,
units: Box<[ResolutionUnit]>,
definitions: Box<[SymbolDefinition]>,
references: Box<[SymbolReference]>,
resolutions: Box<[ResolutionRecord]>,
}
impl ResolutionReport {
pub fn deserialize_with_limits<'de, D>(
deserializer: D,
limits: ResolutionReportLimits,
) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
super::wire::deserialize_with_limits(deserializer, limits)
}
pub(crate) fn new(
tier: ResolutionTier,
units: Box<[ResolutionUnit]>,
definitions: Box<[SymbolDefinition]>,
references: Box<[SymbolReference]>,
resolutions: Box<[ResolutionRecord]>,
) -> Self {
Self {
tier,
units,
definitions,
references,
resolutions,
}
}
pub fn tier(&self) -> ResolutionTier {
self.tier
}
pub fn units(&self) -> &[ResolutionUnit] {
&self.units
}
pub fn definitions(&self) -> &[SymbolDefinition] {
&self.definitions
}
pub fn references(&self) -> &[SymbolReference] {
&self.references
}
pub fn resolutions(&self) -> &[ResolutionRecord] {
&self.resolutions
}
}