1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 /// A helper macro for deriving deserialize for an enum to be used in toml-rs. 6 /// This macro works be relying on an existing FromStr implementation for the 7 /// desired type. 8 macro_rules! deserialize_enum_str { 9 ($name:ident) => { 10 impl<'de> ::serde::Deserialize<'de> for $name { 11 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> 12 where 13 D: ::serde::Deserializer<'de>, 14 { 15 struct Visitor; 16 impl<'de> ::serde::de::Visitor<'de> for Visitor { 17 type Value = $name; 18 19 fn expecting(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { 20 f.write_str("$name") 21 } 22 23 fn visit_str<E>(self, v: &str) -> Result<$name, E> 24 where 25 E: ::serde::de::Error, 26 { 27 match v.parse::<$name>() { 28 Ok(v) => Ok(v), 29 Err(m) => Err(E::custom(m)), 30 } 31 } 32 } 33 deserializer.deserialize_str(Visitor) 34 } 35 } 36 }; 37 } 38 39 mod bindings; 40 mod bitflags; 41 mod builder; 42 mod cargo; 43 mod cdecl; 44 mod config; 45 mod declarationtyperesolver; 46 mod dependencies; 47 mod error; 48 mod ir; 49 mod library; 50 mod mangle; 51 mod monomorph; 52 mod parser; 53 mod rename; 54 mod reserved; 55 mod utilities; 56 mod writer; 57 58 #[allow(unused)] 59 pub(crate) use self::cargo::*; 60 61 pub use self::bindings::Bindings; 62 pub use self::builder::Builder; 63 pub use self::config::*; 64 pub use self::error::Error; 65