extern crate core;
mod common;
pub(crate) mod rc;
pub use common::*;
use std::borrow::Cow;
#[cfg(feature = "v5")]
pub mod v5;
#[derive(serde::Deserialize)]
pub struct Version<'a> {
pub version: Cow<'a, str>,
}
pub enum WebpackStats<'a> {
#[cfg(feature = "v5")]
V5(v5::Stats<'a>),
}
use thiserror::Error;
#[derive(Error, Debug)]
pub enum DeserializationError {
#[error("Could not get version number from json")]
VersionDeserializationError,
#[error("Could not deserialize stats file: {0}")]
StatsDeserializationError(#[from] serde_json::Error),
#[error("Unsupported webpack stats version.")]
UnsupportedVersion,
}
pub fn deserialize_any_version<'a>(
source: &'a str,
) -> Result<WebpackStats<'a>, DeserializationError> {
let version: Version<'a> = serde_json::from_str(source)
.map_err(|_| DeserializationError::VersionDeserializationError)?;
let version_major = version
.version
.trim()
.chars()
.next()
.ok_or(DeserializationError::VersionDeserializationError)?;
match version_major {
#[cfg(feature = "v5")]
'5' => Ok(WebpackStats::V5(serde_json::from_str(source)?)),
_ => Err(DeserializationError::UnsupportedVersion),
}
}