1use sp_std::{
2 borrow::Borrow,
3 fmt,
4 ops::Deref,
5 rc::Rc,
6};
7
8use alloc::string::{
9 String,
10 ToString,
11};
12
13#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
15pub struct Name {
16 inner: Rc<str>,
17}
18impl fmt::Debug for Name {
19 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
20 write!(f, "\"{}\"", self.inner)
21 }
22}
23
24impl AsRef<str> for Name {
25 fn as_ref(&self) -> &str { self.inner.as_ref() }
26}
27
28impl Borrow<str> for Name {
29 fn borrow(&self) -> &str { self.inner.borrow() }
30}
31
32impl fmt::Display for Name {
33 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34 write!(f, "{}", self.inner.to_string())
35 }
36}
37
38impl Deref for Name {
39 type Target = str;
40
41 fn deref(&self) -> &str { self.inner.deref() }
42}
43
44impl<'a> From<&'a str> for Name {
45 fn from(v: &str) -> Name { Self { inner: Rc::from(v) } }
46}
47
48impl From<String> for Name {
49 fn from(v: String) -> Name { Self { inner: Rc::from(v) } }
50}