itf/
lib.rs

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
23/// Deserialize a [`Trace`] over states `S` from an ITF JSON string.
24pub 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
32/// Deserialize a [`Trace`] over states `S` from an ITF JSON [`serde_json::Value`].
33pub 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
41/// Deserialize an ITF-encoded expression `S` from an ITF JSON string.
42pub 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
51/// Deserialize an ITF-encoded expression `S` from an ITF JSON [`serde_json::Value`].
52pub 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}