use serde::Deserialize;
use serde::Serialize;
use mago_reporting::IssueCollection;
use mago_source::HasSource;
use mago_source::SourceCategory;
use mago_source::SourceIdentifier;
use mago_span::HasSpan;
use mago_span::Span;
use crate::Reflection;
use crate::attribute::AttributeReflection;
use crate::identifier::Name;
use crate::r#type::TypeReflection;
#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)]
pub struct ConstantReflection {
pub attribute_reflections: Vec<AttributeReflection>,
pub name: Name,
pub type_reflection: TypeReflection,
pub item_span: Span,
pub definition_span: Span,
pub is_populated: bool,
pub issues: IssueCollection,
}
impl HasSpan for ConstantReflection {
fn span(&self) -> Span {
self.item_span
}
}
impl HasSource for ConstantReflection {
fn source(&self) -> SourceIdentifier {
self.span().source()
}
}
impl Reflection for ConstantReflection {
fn get_category(&self) -> SourceCategory {
self.source().category()
}
fn is_populated(&self) -> bool {
self.is_populated
}
fn take_issues(&mut self) -> IssueCollection {
std::mem::take(&mut self.issues)
}
}