serde_types/parsing/
mod.rs

1use std::{
2    fmt::{Debug, Formatter},
3    str::FromStr,
4};
5
6use serde::{
7    __private::de::{Content, ContentDeserializer},
8    de::{value::SeqDeserializer, IntoDeserializer, Unexpected, Visitor},
9    Deserializer,
10};
11
12mod der;
13mod errors;
14
15pub struct ParsableValue<'de> {
16    inner: Content<'de>,
17}
18
19pub struct ParsableError {
20    pub message: String,
21    pub source: Option<Box<dyn std::error::Error>>,
22}
23
24impl Default for ParsableValue<'_> {
25    fn default() -> Self {
26        Self { inner: Content::Map(vec![]) }
27    }
28}
29
30impl Debug for ParsableValue<'_> {
31    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
32        Debug::fmt(&self.inner, f)
33    }
34}
35
36impl<'de> From<Content<'de>> for ParsableValue<'de> {
37    fn from(value: Content<'de>) -> Self {
38        Self { inner: value }
39    }
40}
41
42impl<'de> ParsableValue<'de> {
43    pub fn new(v: Content<'de>) -> Self {
44        Self { inner: v }
45    }
46    pub fn text(s: &'de str) -> Self {
47        Self { inner: Content::Str(s) }
48    }
49    pub fn get(&self, key: &str) -> Option<&Content<'de>> {
50        match &self.inner {
51            Content::Map(map) => {
52                for (k, v) in map.iter().rev() {
53                    if k.as_str()? == key {
54                        return Some(v);
55                    }
56                }
57            }
58            _ => unreachable!(),
59        }
60        None
61    }
62    pub fn insert(&mut self, key: &'de str, value: Content<'de>) {
63        if let Content::Map(map) = &mut self.inner {
64            map.push((Content::Str(key), value));
65        }
66    }
67    pub fn insert_header(&mut self) {}
68}