wrap_manifest_schemas/
versions.rs1use crate::error::Error;
2use crate::utils::sanitize_semver_version;
3use polywrap_schemafy::schemafy;
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
11
12schemafy!(
13 root: WrapManifest01
14 "schemas/0.1.json"
15);
16
17#[derive(Clone)]
18pub enum AnyManifest {
19 WrapManifest01(WrapManifest01),
20}
21
22impl AnyManifest {
23 pub fn version(&self) -> String {
24 match self {
25 AnyManifest::WrapManifest01(_) => sanitize_semver_version("0.1"),
26 }
27 }
28
29 pub fn from_json_value(value: Value) -> Result<Self, Error> {
30 match value["version"].as_str().unwrap() {
31 "0.1" => Ok(AnyManifest::WrapManifest01(serde_json::from_value(value)?)),
32 v => Err(Error::FromJSONError(format!(
33 "Invalid manifest version: {v}"
34 ))),
35 }
36 }
37
38 pub fn to_json_value(&self) -> Result<Value, Error> {
39 match self {
40 AnyManifest::WrapManifest01(manifest) => Ok(serde_json::to_value(manifest)?),
41 }
42 }
43
44 pub fn get_latest_version() -> String {
45 sanitize_semver_version("0.1")
46 }
47}
48
49pub type WrapManifest = WrapManifest01;
50pub type WrapManifestAbi = WrapManifest01Abi;