1use std::str::FromStr;
7
8use crate::error::Error;
9#[derive(Clone, Debug, PartialEq)]
13pub enum ProgramType {
14 JsonEunomia,
16 WasmModule,
18 Tar,
20}
21
22impl TryFrom<&str> for ProgramType {
23 type Error = Error;
24
25 fn try_from(path: &str) -> Result<Self, Self::Error> {
26 match path.split('.').last().unwrap() {
27 "json" => Ok(ProgramType::JsonEunomia),
28 "wasm" => Ok(ProgramType::WasmModule),
29 "tar" => Ok(ProgramType::Tar),
30 _ => Err(Error::UnknownSuffix(format!(
31 "{} suffix incorrect, must end with .json, .wasm or .tar",
32 path
33 ))),
34 }
35 }
36}
37
38impl FromStr for ProgramType {
39 type Err = Error;
40
41 fn from_str(s: &str) -> Result<Self, Self::Err> {
42 match s {
43 "JsonEunomia" => Ok(ProgramType::JsonEunomia),
44 "Tar" => Ok(ProgramType::Tar),
45 "WasmModule" => Ok(ProgramType::WasmModule),
46 &_ => Err(Error::Other("fail parse program type str".to_string())),
47 }
48 }
49}