musli_json/de/
key_unsigned_visitor.rs

1use core::fmt;
2use core::marker;
3
4use musli::de::ValueVisitor;
5use musli::Context;
6
7use crate::parser::integer::Unsigned;
8use crate::parser::SliceParser;
9
10use super::parse_unsigned;
11
12pub(crate) struct KeyUnsignedVisitor<T> {
13    _marker: marker::PhantomData<T>,
14}
15
16impl<T> KeyUnsignedVisitor<T> {
17    pub(super) const fn new() -> Self {
18        Self {
19            _marker: marker::PhantomData,
20        }
21    }
22}
23
24impl<'de, C, T> ValueVisitor<'de, C, [u8]> for KeyUnsignedVisitor<T>
25where
26    C: ?Sized + Context,
27    T: Unsigned,
28{
29    type Ok = T;
30
31    #[inline]
32    fn expecting(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
33        write!(f, "bytes")
34    }
35
36    #[inline]
37    fn visit_ref(self, cx: &C, bytes: &[u8]) -> Result<Self::Ok, C::Error> {
38        parse_unsigned(cx, &mut SliceParser::new(bytes))
39    }
40}