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