pedant_types/resolution/
report.rs1use serde::{Deserialize, Deserializer, Serialize};
4
5use super::builder::ResolutionReportLimits;
6use super::definition::SymbolDefinition;
7use super::record::ResolutionRecord;
8use super::reference::SymbolReference;
9use super::unit::ResolutionUnit;
10
11#[derive(Serialize, Deserialize, Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
15#[serde(rename_all = "snake_case")]
16pub enum ResolutionTier {
17 Syntactic,
19 Semantic,
21}
22
23#[derive(Serialize, Clone, Debug, PartialEq, Eq)]
29pub struct ResolutionReport {
30 tier: ResolutionTier,
31 units: Box<[ResolutionUnit]>,
32 definitions: Box<[SymbolDefinition]>,
33 references: Box<[SymbolReference]>,
34 resolutions: Box<[ResolutionRecord]>,
35}
36
37impl ResolutionReport {
38 pub fn deserialize_with_limits<'de, D>(
44 deserializer: D,
45 limits: ResolutionReportLimits,
46 ) -> Result<Self, D::Error>
47 where
48 D: Deserializer<'de>,
49 {
50 super::wire::deserialize_with_limits(deserializer, limits)
51 }
52
53 pub(crate) fn new(
54 tier: ResolutionTier,
55 units: Box<[ResolutionUnit]>,
56 definitions: Box<[SymbolDefinition]>,
57 references: Box<[SymbolReference]>,
58 resolutions: Box<[ResolutionRecord]>,
59 ) -> Self {
60 Self {
61 tier,
62 units,
63 definitions,
64 references,
65 resolutions,
66 }
67 }
68
69 pub fn tier(&self) -> ResolutionTier {
71 self.tier
72 }
73
74 pub fn units(&self) -> &[ResolutionUnit] {
76 &self.units
77 }
78
79 pub fn definitions(&self) -> &[SymbolDefinition] {
81 &self.definitions
82 }
83
84 pub fn references(&self) -> &[SymbolReference] {
86 &self.references
87 }
88
89 pub fn resolutions(&self) -> &[ResolutionRecord] {
91 &self.resolutions
92 }
93}