use crate::InputValue;
use leo_input::{definitions::Definition, InputParserError};
use std::collections::HashMap;
#[derive(Clone, PartialEq, Eq, Default)]
pub struct MainInput {
input: HashMap<String, Option<InputValue>>,
}
#[allow(clippy::len_without_is_empty)]
impl MainInput {
pub fn new() -> Self {
Self::default()
}
pub fn empty(&self) -> Self {
let mut input = self.input.clone();
input.iter_mut().for_each(|(_name, value)| {
*value = None;
});
Self { input }
}
pub fn len(&self) -> usize {
self.input.len()
}
pub fn insert(&mut self, key: String, value: Option<InputValue>) {
self.input.insert(key, value);
}
pub fn parse(&mut self, definitions: Vec<Definition>) -> Result<(), InputParserError> {
for definition in definitions {
let name = definition.parameter.variable.value;
let value = InputValue::from_expression(definition.parameter.type_, definition.expression)?;
self.insert(name, Some(value));
}
Ok(())
}
pub fn get(&self, name: &str) -> Option<Option<InputValue>> {
self.input.get(name).cloned()
}
}