harper_core/
fat_token.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{CharStringExt, TokenKind};
4
5/// A [`Token`](crate::Token) that holds its content as a fat [`Vec<char>`] rather than as a
6/// [`Span`](crate::Span).
7#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, PartialOrd, Hash, Eq)]
8pub struct FatToken {
9    pub content: Vec<char>,
10    pub kind: TokenKind,
11}
12
13impl From<FatStringToken> for FatToken {
14    fn from(value: FatStringToken) -> Self {
15        Self {
16            content: value.content.chars().collect(),
17            kind: value.kind,
18        }
19    }
20}
21
22/// Similar to a [`FatToken`], but uses a [`String`] as the underlying store.
23#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, PartialOrd, Hash, Eq)]
24pub struct FatStringToken {
25    pub content: String,
26    pub kind: TokenKind,
27}
28
29impl From<FatToken> for FatStringToken {
30    fn from(value: FatToken) -> Self {
31        Self {
32            content: value.content.to_string(),
33            kind: value.kind,
34        }
35    }
36}