1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
use crate::{
buffer::Buffer,
bytes::Bytes,
deserialize::{Deserialize, DeserializeError, Deserializer},
formula::{BareFormula, Formula},
serialize::{write_bytes, Serialize, Sizes},
};
impl Formula for str {
const MAX_STACK_SIZE: Option<usize> = None;
const EXACT_SIZE: bool = true;
const HEAPLESS: bool = true;
}
impl BareFormula for str {}
impl Serialize<str> for &str {
#[inline(always)]
fn serialize<B>(self, sizes: &mut Sizes, buffer: B) -> Result<(), B::Error>
where
B: Buffer,
{
write_bytes(self.as_bytes(), sizes, buffer)
}
#[inline(always)]
fn size_hint(&self) -> Option<Sizes> {
Some(Sizes::with_stack(self.len()))
}
}
impl<'de, 'fe: 'de> Deserialize<'fe, str> for &'de str {
#[inline(always)]
fn deserialize(deserializer: Deserializer<'fe>) -> Result<Self, DeserializeError>
where
Self: Sized,
{
let bytes = deserializer.read_all_bytes();
match core::str::from_utf8(bytes) {
Ok(s) => Ok(s),
Err(error) => Err(DeserializeError::NonUtf8(error)),
}
}
#[inline(always)]
fn deserialize_in_place(
&mut self,
deserializer: Deserializer<'fe>,
) -> Result<(), DeserializeError> {
let bytes = deserializer.read_all_bytes();
match core::str::from_utf8(bytes) {
Ok(s) => {
*self = s;
Ok(())
}
Err(error) => Err(DeserializeError::NonUtf8(error)),
}
}
}
impl Serialize<Bytes> for &str {
#[inline(always)]
fn serialize<B>(self, sizes: &mut Sizes, buffer: B) -> Result<(), B::Error>
where
B: Buffer,
{
write_bytes(self.as_bytes(), sizes, buffer)
}
#[inline(always)]
fn size_hint(&self) -> Option<Sizes> {
Some(Sizes::with_stack(self.len()))
}
}