use std::collections::HashMap;
use serde::Deserialize;
use crate::Criterion;
#[macro_export]
macro_rules! yaml {
( $file:expr ) => {
::std::str::from_utf8(include_bytes!($file))
};
}
#[derive(Deserialize)]
pub struct RubricYaml {
pub name: String,
pub desc: Option<String>,
pub criteria: HashMap<String, CriterionYaml>,
pub total: Option<isize>
}
#[derive(Deserialize)]
pub struct CriterionYaml {
stub: Option<String>,
index: Option<i64>,
desc: Option<String>,
worth: i16,
messages: Option<(String, String)>,
hide: Option<bool>,
}
impl CriterionYaml {
pub fn into_criterion(self, name: String) -> Criterion {
let mut builder = Criterion::new(&name).worth(self.worth);
if let Some(msg) = self.messages {
builder = builder.messages(&msg.0, &msg.1)
}
if let Some(stub) = self.stub {
builder = builder.stub(&stub)
}
if let Some(h) = self.hide {
builder = builder.hide(h)
}
if let Some(desc) = self.desc {
builder = builder.desc(&desc)
}
if let Some(index) = self.index {
builder = builder.index(index);
}
builder.build()
}
}