pub_just/
name.rs

1use super::*;
2
3/// A name. This is just a `Token` of kind `Identifier`, but we give it its own
4/// type for clarity.
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Ord, PartialOrd)]
6pub struct Name<'src> {
7  pub token: Token<'src>,
8}
9
10impl<'src> Name<'src> {
11  pub fn from_identifier(token: Token<'src>) -> Self {
12    assert_eq!(token.kind, TokenKind::Identifier);
13    Self { token }
14  }
15}
16
17impl<'src> Deref for Name<'src> {
18  type Target = Token<'src>;
19
20  fn deref(&self) -> &Self::Target {
21    &self.token
22  }
23}
24
25impl Display for Name<'_> {
26  fn fmt(&self, f: &mut Formatter) -> fmt::Result {
27    write!(f, "{}", self.lexeme())
28  }
29}
30
31impl<'src> Serialize for Name<'src> {
32  fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
33  where
34    S: Serializer,
35  {
36    serializer.serialize_str(self.lexeme())
37  }
38}