1use derive_more::From;
5use serde::{Deserialize, Serialize};
6use std::borrow::Cow;
7use std::ops::Deref;
8
9#[derive(Clone, Debug, From, PartialEq, Eq, Hash, Deserialize, Serialize)]
10#[from(String, &str, Box<str>, Cow<'_, str>)]
11#[cfg_attr(feature = "typescript", derive(ts_rs::TS))]
12pub struct Token(Box<str>);
13
14impl Token {
15 pub fn new(token: impl AsRef<str>) -> Self {
16 Self(Box::from(token.as_ref()))
17 }
18}
19
20impl AsRef<str> for Token {
21 fn as_ref(&self) -> &str {
22 self.0.as_str()
23 }
24}
25
26impl AsRef<[u8]> for Token {
27 fn as_ref(&self) -> &[u8] {
28 self.0.as_bytes()
29 }
30}
31
32impl Deref for Token {
33 type Target = str;
34
35 fn deref(&self) -> &Self::Target {
36 self.0.as_str()
37 }
38}