use std::str::FromStr;
use crate::error::Error;
#[derive(Clone, Debug, PartialEq)]
pub enum ProgramType {
    JsonEunomia,
    WasmModule,
    Tar,
}
impl TryFrom<&str> for ProgramType {
    type Error = Error;
    fn try_from(path: &str) -> Result<Self, Self::Error> {
        match path.split('.').last().unwrap() {
            "json" => Ok(ProgramType::JsonEunomia),
            "wasm" => Ok(ProgramType::WasmModule),
            "tar" => Ok(ProgramType::Tar),
            _ => Err(Error::UnknownSuffix(format!(
                "{} suffix incorrect, must end with .json, .wasm or .tar",
                path
            ))),
        }
    }
}
impl FromStr for ProgramType {
    type Err = Error;
    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "JsonEunomia" => Ok(ProgramType::JsonEunomia),
            "Tar" => Ok(ProgramType::Tar),
            "WasmModule" => Ok(ProgramType::WasmModule),
            &_ => Err(Error::Other("fail parse program type str".to_string())),
        }
    }
}