tmc_langs_util/
deserialize.rs

1//! Utility functions for de/serializing data wrapped with serde_path_to_error for better errors.
2
3use crate::{JsonError, TomlError, YamlError};
4use serde::de::DeserializeOwned;
5use serde_json::Value;
6use std::io::Read;
7
8pub fn json_from_str<T: DeserializeOwned>(json: &str) -> Result<T, JsonError> {
9    let de = &mut serde_json::Deserializer::from_str(json);
10    let res = serde_path_to_error::deserialize(de)?;
11    Ok(res)
12}
13
14pub fn json_from_reader<T: DeserializeOwned>(json: impl Read) -> Result<T, JsonError> {
15    let de = &mut serde_json::Deserializer::from_reader(json);
16    let res = serde_path_to_error::deserialize(de)?;
17    Ok(res)
18}
19
20pub fn json_from_slice<T: DeserializeOwned>(json: &[u8]) -> Result<T, JsonError> {
21    let de = &mut serde_json::Deserializer::from_slice(json);
22    let res = serde_path_to_error::deserialize(de)?;
23    Ok(res)
24}
25
26pub fn json_from_value<T: DeserializeOwned>(json: Value) -> Result<T, JsonError> {
27    let res = serde_path_to_error::deserialize(json)?;
28    Ok(res)
29}
30
31pub fn toml_from_str<T: DeserializeOwned>(toml: &str) -> Result<T, TomlError> {
32    let de = toml::Deserializer::parse(toml)?;
33    let res = serde_path_to_error::deserialize(de)?;
34    Ok(res)
35}
36
37pub fn yaml_from_str<T: DeserializeOwned>(yaml: &str) -> Result<T, YamlError> {
38    let de = serde_yaml::Deserializer::from_str(yaml);
39    let res = serde_path_to_error::deserialize(de)?;
40    Ok(res)
41}
42
43pub fn yaml_from_reader<T: DeserializeOwned>(yaml: impl Read) -> Result<T, YamlError> {
44    let de = serde_yaml::Deserializer::from_reader(yaml);
45    let res = serde_path_to_error::deserialize(de)?;
46    Ok(res)
47}
48
49pub fn yaml_from_slice<T: DeserializeOwned>(yaml: &[u8]) -> Result<T, YamlError> {
50    let de = serde_yaml::Deserializer::from_slice(yaml);
51    let res = serde_path_to_error::deserialize(de)?;
52    Ok(res)
53}