use super::{super::utils::*, control_value::*};
use std::io::*;
#[derive(Clone, Debug, Default, Hash, Eq, PartialEq)]
pub struct Controls(pub Vec<(char, ControlValue)>);
impl Controls {
pub fn is_empty(&self) -> bool {
self.0.is_empty()
}
pub fn add<ControlT>(&mut self, key: char, value: ControlT)
where
ControlT: Into<ControlValue>,
{
self.0.push((key, value.into()));
}
pub fn with<ControlT>(mut self, key: char, value: ControlT) -> Self
where
ControlT: Into<ControlValue>,
{
self.add(key, value);
self
}
pub fn write<WriteT>(&self, mut writer: WriteT) -> Result<()>
where
WriteT: Write,
{
let mut iterator = self.0.iter().peekable();
while let Some((key, value)) = iterator.next() {
writer.write_char(*key)?;
writer.write_all(b"=")?;
value.write(&mut writer)?;
if iterator.peek().is_some() {
writer.write_all(b",")?;
}
}
Ok(())
}
}