use std::path::PathBuf;
use serde::Deserialize;
#[derive(Deserialize, Debug, Clone)]
pub struct Script {
pub model: PathBuf,
pub param: PathBuf,
#[serde(default)]
pub title: Option<String>,
#[serde(default)]
pub repeats: Option<i64>,
#[serde(default)]
pub strategy: Option<String>,
#[serde(default)]
pub conflict_limit: Option<i64>,
#[serde(default)]
pub only_assignments: Option<bool>,
#[serde(default)]
pub hide_untouched_candidates: Option<bool>,
#[serde(default)]
pub step: Vec<Step>,
}
#[derive(Deserialize, Debug, Clone)]
#[serde(tag = "op", rename_all = "snake_case")]
pub enum Step {
Deduce { lit: String },
Pin { lit: String },
ShowMus {
lit: String,
#[serde(default)]
title: Option<String>,
#[serde(default)]
repeats: Option<i64>,
#[serde(default)]
strategy: Option<String>,
#[serde(default)]
note: Option<String>,
},
ShowSmallestMuses {
lit: String,
#[serde(default)]
title: Option<String>,
#[serde(default)]
repeats: Option<i64>,
#[serde(default)]
strategy: Option<String>,
#[serde(default)]
max: Option<usize>,
#[serde(default)]
note: Option<String>,
},
ShowAllSizeMuses {
lit: String,
#[serde(default)]
title: Option<String>,
#[serde(default)]
repeats: Option<i64>,
#[serde(default)]
strategy: Option<String>,
#[serde(default)]
max_size: Option<usize>,
#[serde(default)]
max: Option<usize>,
#[serde(default)]
note: Option<String>,
},
Heatmap {
#[serde(default)]
title: Option<String>,
#[serde(default)]
note: Option<String>,
#[serde(default)]
commentary: Option<String>,
},
DeduceTrivial {
max_mus_size: usize,
#[serde(default)]
title: Option<String>,
#[serde(default)]
note: Option<String>,
#[serde(default)]
skip: Vec<String>,
},
}