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>)]
11pub struct Token(Box<str>);
12
13impl Token {
14 pub fn new(token: impl AsRef<str>) -> Self {
15 Self(Box::from(token.as_ref()))
16 }
17}
18
19impl AsRef<str> for Token {
20 fn as_ref(&self) -> &str {
21 self.0.as_str()
22 }
23}
24
25impl AsRef<[u8]> for Token {
26 fn as_ref(&self) -> &[u8] {
27 self.0.as_bytes()
28 }
29}
30
31impl Deref for Token {
32 type Target = str;
33
34 fn deref(&self) -> &Self::Target {
35 self.0.as_str()
36 }
37}