1#![doc = include_str!("../README.md")]
2
3use serde::de::DeserializeOwned;
4use serde::Deserialize;
5
6pub mod de;
7pub mod error;
8pub mod runner;
9pub mod state;
10pub mod trace;
11
12pub use error::Error;
13pub use runner::Runner;
14pub use state::State;
15pub use trace::Trace;
16
17#[doc(hidden)]
18pub mod value;
19
20#[doc(hidden)]
21pub use value::Value;
22
23pub fn trace_from_str<S>(str: &str) -> Result<Trace<S>, Error>
25where
26 S: for<'de> Deserialize<'de>,
27{
28 let trace_value: Trace<Value> = serde_json::from_str(str)?;
29 trace_value.decode()
30}
31
32pub fn trace_from_value<S>(value: serde_json::Value) -> Result<Trace<S>, Error>
34where
35 S: DeserializeOwned,
36{
37 let trace_value: Trace<Value> = serde_json::from_value(value)?;
38 trace_value.decode()
39}
40
41pub fn from_str<S>(str: &str) -> Result<S, Error>
43where
44 S: for<'de> Deserialize<'de>,
45{
46 let value: Value = serde_json::from_str(str)?;
47 let data = S::deserialize(value)?;
48 Ok(data)
49}
50
51pub fn from_value<S>(value: serde_json::Value) -> Result<S, Error>
53where
54 S: DeserializeOwned,
55{
56 let trace_value: Value = serde_json::from_value(value)?;
57 let s = S::deserialize(trace_value)?;
58 Ok(s)
59}