serde_types/parsing/
mod.rs1use 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}