1use crate::*;
4
5use core::hash::{Hash, Hasher};
6
7impl_for! {
8 From<String>:
9
10 fn from(str: String) -> Self {
11 Self::from(str.as_str())
12 }
13}
14
15impl_for! {
16 From<&str>:
17
18 fn from(str: &str) -> Self {
19 assert!(
20 Self::fits(str.len()),
21 "{}::from(): cannot store {} characters",
22 Self::type_name().join(""),
23 str.len()
24 );
25 unsafe { Self::from_utf8_unchecked(str.as_bytes()) }
27 }
28}
29
30impl_for! {
31 std::str::FromStr:
32
33 type Err = std::convert::Infallible;
34
35 fn from_str(s: &str) -> Result<Self, Self::Err> {
36 Ok(Self::from(s))
37 }
38}
39
40impl_for! {
41 Hash:
42
43 fn hash<H: Hasher>(&self, state: &mut H) {
44 self.str.hash(state);
45 }
46}
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn test_from_string() {
54 let s: SlimStringlet<4> = String::from("hey").into();
55 assert_eq!(s.as_ref(), "hey");
56 }
57
58 #[test]
59 fn test_from_long_str() {
60 let s: VarStringlet<16> = "Rustacean".into();
61 assert_eq!(&s, "Rustacean");
62 }
63
64 #[test]
65 #[should_panic]
66 fn test_panics_when_too_long() {
67 let _s: VarStringlet<2> = "hello world".into();
68 }
69
70 #[test]
71 fn test_from_str() {
72 let s = SlimStringlet::<8>::from("hello");
73 assert_eq!(s.as_ref(), "hello");
74 }
75}