chiark / gitweb /
wip toml, doex not work
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 17 Nov 2020 19:34:09 +0000 (19:34 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 18 Nov 2020 11:30:48 +0000 (11:30 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/config.rs
src/toml.rs

index 3f5c45142624fa10ae80dea1309b5f492e6cd181..4e1027b7ac5eca43d274ea58b4cbf344ee64db54 100644 (file)
@@ -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");
index 62d86b0598f3d16eb0c429da2723c264cde533f8..fa19da021021d6964b2e4d98132436857eb1d223 100644 (file)
@@ -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<T: DeserializeOwned> (s: &str) -> T
+{
+  let tv : toml::Value = s.try_into()
+    .map_err(|e| match e { })
+    ?;
+  from_value(&tv)?
+}