use crate::{error::utils::MetaData, line::Variable};
use std::collections::HashMap;
#[cfg(feature = "serde_support")]
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq)]
pub struct Line {
pub text: String,
pub tags: Vec<String>,
}
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde_support", derive(Deserialize, Serialize))]
pub struct Choice {
pub text: String,
pub tags: Vec<String>,
pub(crate) index: usize,
}
#[derive(Debug)]
pub enum Prompt {
Done,
Choice(Vec<Choice>),
}
impl Prompt {
pub fn get_choices(&self) -> Option<Vec<Choice>> {
match self {
Prompt::Choice(choices) => Some(choices.clone()),
_ => None,
}
}
}
pub type LineBuffer = Vec<Line>;
pub type VariableSet = HashMap<String, VariableInfo>;
#[derive(Clone, Debug)]
#[cfg_attr(feature = "serde_support", derive(Deserialize, Serialize))]
pub struct VariableInfo {
pub variable: Variable,
pub meta_data: MetaData,
}
#[cfg(test)]
impl VariableInfo {
pub fn new<T: Into<Variable>>(variable: T, line_index: usize) -> Self {
VariableInfo {
variable: variable.into(),
meta_data: line_index.into(),
}
}
}