musli_json/de/
key_signed_visitor.rs

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