From 598c806799f47b2b1ef261dfc0c8c2b23572096e Mon Sep 17 00:00:00 2001 From: Anna Clemens Date: Thu, 17 Nov 2022 19:48:04 -0500 Subject: [PATCH] feat: add ability to deserialise from json value --- src/lib.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 2a0a31b..ea5b88f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,8 +2,8 @@ use std::io::{Read, Seek}; use serde::de::Error as _; use serde::Deserialize; +use serde_json::{Deserializer, StreamDeserializer}; use serde_json::de::IoRead; -use serde_json::StreamDeserializer; pub use zip::{read::ZipFile, ZipArchive}; use crate::error::{Error, Result}; @@ -15,6 +15,16 @@ pub mod error; pub(crate) mod tracking_reader; pub mod ttmp_extractor; +pub fn from_value(value: serde_json::Value) -> Result { + let manifest = if value.is_array() { + ManifestKind::V1(serde_json::from_value(value).map_err(Error::InvalidManifest)?) + } else { + ManifestKind::V2(serde_json::from_value(value).map_err(Error::InvalidManifest)?) + }; + + Ok(manifest) +} + pub fn from_reader(reader: R) -> Result<(ManifestKind, ZipArchive)> { let mut zip = ZipArchive::new(reader).map_err(Error::Zip)?; let manifest = zip.by_name("TTMPL.mpl").map_err(Error::Zip)?;