use std::fmt;
use serde::{Deserialize, Serialize};
use super::{Parameter, User};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum PredictorAccess {
Private,
Public,
Unlisted,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum PredictorStatus {
Compiling,
Active,
Archived,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Predictor {
pub tag: String,
pub owner: User,
pub name: String,
pub status: PredictorStatus,
pub access: PredictorAccess,
pub signature: Signature,
pub created: String,
#[serde(default)]
pub description: Option<String>,
#[serde(default)]
pub card: Option<String>,
#[serde(default)]
pub media: Option<String>,
#[serde(default)]
pub license: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Signature {
pub inputs: Vec<Parameter>,
pub outputs: Vec<Parameter>,
}
impl fmt::Display for Predictor {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match serde_json::to_string_pretty(self) {
Ok(json) => f.write_str(&json),
Err(_) => write!(f, "{:?}", self),
}
}
}