#[cfg(feature = "serde")] use serde::{Deserialize, Serialize}; /// A token is a string that has been normalised in some way. /// The normalised form is used for comparison, while the original form is used /// for applying Operations. #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[derive(Debug, Clone)] pub struct Token where T: PartialEq + Clone, { normalised: T, original: String, } impl From<&str> for Token { fn from(s: &str) -> Self { Token { normalised: s.to_owned(), original: s.to_owned(), } } } impl Token where T: PartialEq + Clone, { pub fn new(normalised: T, original: String) -> Self { Token { normalised, original, } } pub fn original(&self) -> &str { &self.original } pub fn normalised(&self) -> &T { &self.normalised } pub fn get_original_length(&self) -> usize { self.original.chars().count() } } impl PartialEq for Token where T: PartialEq + Clone, { fn eq(&self, other: &Self) -> bool { self.normalised == other.normalised } }