toml/de/parser/
detable.rs1use alloc::borrow::Cow;
2
3use serde_spanned::Spanned;
4
5use crate::alloc_prelude::*;
6use crate::de::DeString;
7use crate::de::DeValue;
8use crate::map::Map;
9
10pub type DeTable<'i> = Map<Spanned<DeString<'i>>, Spanned<DeValue<'i>>>;
17
18impl<'i> DeTable<'i> {
19 pub fn parse(input: &'i str) -> Result<Spanned<Self>, crate::de::Error> {
21 let source = toml_parser::Source::new(input);
22 let mut errors = crate::de::error::TomlSink::<Option<_>>::new(source);
23 let value = crate::de::parser::parse_document(source, &mut errors);
24 if let Some(err) = errors.into_inner() {
25 Err(err)
26 } else {
27 Ok(value)
28 }
29 }
30
31 pub fn parse_recoverable(input: &'i str) -> (Spanned<Self>, Vec<crate::de::Error>) {
33 let source = toml_parser::Source::new(input);
34 let mut errors = crate::de::error::TomlSink::<Vec<_>>::new(source);
35 let value = crate::de::parser::parse_document(source, &mut errors);
36 (value, errors.into_inner())
37 }
38
39 pub fn make_owned(&mut self) {
41 self.mut_entries(|k, v| {
42 let owned = core::mem::take(k.get_mut());
43 *k.get_mut() = Cow::Owned(owned.into_owned());
44 v.get_mut().make_owned();
45 });
46 }
47}