1mod de;
2pub mod duration;
3pub mod dynamic;
4pub mod list;
5pub mod map;
6mod ser;
7pub mod value;
8
9use std::sync::Arc;
10
11pub use self::duration::*;
12pub use self::list::*;
13pub use self::map::*;
14pub use self::value::*;
15
16use miette::Error;
17
18use crate::parser::TokenTree;
19use crate::Environment;
20
21pub type Function = Arc<
23 dyn Fn(&Environment, &[TokenTree]) -> Result<Value, Error> + Send + Sync,
24>;
25
26pub fn try_from_value<T>(value: Value) -> Result<T, Error>
28where
29 T: serde::de::DeserializeOwned,
30{
31 match T::deserialize(value) {
32 Ok(value) => Ok(value),
33 Err(err) => miette::bail!("Failed to deserialize value: {}", err),
34 }
35}
36
37pub fn try_from_map<T>(value: Map) -> Result<T, Error>
39where
40 T: serde::de::DeserializeOwned,
41{
42 match T::deserialize(value) {
43 Ok(value) => Ok(value),
44 Err(err) => miette::bail!("Failed to deserialize value: {}", err),
45 }
46}
47
48pub fn try_from_list<T>(value: List) -> Result<T, Error>
50where
51 T: serde::de::DeserializeOwned,
52{
53 match T::deserialize(value) {
54 Ok(value) => Ok(value),
55 Err(err) => miette::bail!("Failed to deserialize value: {}", err),
56 }
57}