mago_type_syntax/cst/
identifier.rs1use mago_database::file::FileId;
2use mago_span::HasSpan;
3use mago_span::Span;
4
5use crate::token::TypeToken;
6
7#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, PartialOrd, Ord)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize))]
9pub struct Identifier<'arena> {
10 pub span: Span,
11 pub value: &'arena [u8],
12}
13
14impl HasSpan for Identifier<'_> {
15 fn span(&self) -> Span {
16 self.span
17 }
18}
19
20impl<'arena> Identifier<'arena> {
21 #[inline]
23 #[must_use]
24 pub fn from_token(token: TypeToken<'arena>, file_id: FileId) -> Self {
25 Identifier { span: token.span_for(file_id), value: token.value }
26 }
27}
28
29impl std::fmt::Display for Identifier<'_> {
30 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
31 f.write_str(&String::from_utf8_lossy(self.value))
32 }
33}