use serde::Deserialize;
use serde::Serialize;
use mago_span::Span;
use crate::ttype::union::TUnion;
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub struct TypeMetadata {
pub span: Span,
pub type_union: TUnion,
pub from_docblock: bool,
pub inferred: bool,
}
impl TypeMetadata {
#[must_use]
pub fn new(type_union: TUnion, span: Span) -> Self {
Self { span, type_union, from_docblock: false, inferred: false }
}
#[must_use]
pub fn from_docblock(type_union: TUnion, span: Span) -> Self {
Self { span, type_union, from_docblock: true, inferred: false }
}
pub fn map_type_union<F>(self, f: F) -> Self
where
F: FnOnce(TUnion) -> TUnion,
{
Self {
span: self.span,
type_union: f(self.type_union),
from_docblock: self.from_docblock,
inferred: self.inferred,
}
}
}