From: Ian Jackson Date: Tue, 17 Nov 2020 19:34:09 +0000 (+0000) Subject: wip toml, doex not work X-Git-Tag: otter-0.2.0~498 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=bdaed2b79cfa4bac9a83f3ffece092391c9d1e38;p=otter.git wip toml, doex not work Signed-off-by: Ian Jackson --- diff --git a/src/config.rs b/src/config.rs index 3f5c4514..4e1027b7 100644 --- a/src/config.rs +++ b/src/config.rs @@ -125,7 +125,7 @@ impl ServerConfig { impl Default for ServerConfig { fn default() -> ServerConfig { - let spec : ServerConfigSpec = toml::de::from_str(r#" + let spec : ServerConfigSpec = crate::toml::from_str(r#" public_url = "XXX" "#) .expect("parse dummy config as ServerConfigSpec"); diff --git a/src/toml.rs b/src/toml.rs index 62d86b05..fa19da02 100644 --- a/src/toml.rs +++ b/src/toml.rs @@ -2,14 +2,15 @@ // SPDX-License-Identifier: AGPL-3.0-or-later // There is NO WARRANTY. +use std::convert::TryInto; use std::fmt::{self, Debug, Display}; use std::iter::Peekable; use std::slice; use fehler::throws; use serde::forward_to_deserialize_any; -use serde::de::{Deserializer, DeserializeSeed, IntoDeserializer}; -use serde::de::{MapAccess, SeqAccess, Visitor}; +use serde::de::{Deserialize, DeserializeOwned, Deserializer, DeserializeSeed}; +use serde::de::{IntoDeserializer, MapAccess, SeqAccess, Visitor}; use thiserror::Error; #[derive(Error,Debug)] @@ -103,3 +104,18 @@ impl<'de> Deserializer<'de> for TomlDe<'de> { tuple_struct map struct enum identifier ignored_any } } + +#[throws(Error)] +pub fn from_value<'de, T: Deserialize<'de>> (tv: &'de toml::Value) -> T +{ + Deserialize::deserialize(TomlDe(tv))? +} + +#[throws(Error)] +pub fn from_str (s: &str) -> T +{ + let tv : toml::Value = s.try_into() + .map_err(|e| match e { }) + ?; + from_value(&tv)? +}