use crate::brain_prelude::*;
pub const SPLIT_CHARS: [char; 2] = [' ', '\n'];
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct BrainConfig {
pub max_ingestion_state_size: usize,
pub training: bool,
pub mute: bool,
pub reply_rate: f64,
pub min_generation_state_size: usize,
pub max_generation_state_size: usize,
pub excluded_words: Vec<String>,
}
impl Default for BrainConfig {
fn default() -> Self {
Self {
max_ingestion_state_size: 5,
training: false,
mute: false,
reply_rate: 1f64,
min_generation_state_size: 2,
max_generation_state_size: 4,
excluded_words: vec![],
}
}
}
impl BrainConfig {
pub(crate) fn get_state_range(&self) -> Range<usize> {
Range {
start: self.min_generation_state_size,
end: self.max_generation_state_size,
}
}
pub fn from_file(config_path: impl AsRef<str>) -> Result<Self> {
let mut config_file = File::open(config_path.as_ref())?;
let mut buffer = String::new();
config_file.read_to_string(&mut buffer)?;
let config: BrainConfig = serde_yaml::from_str(&buffer).unwrap();
Ok(config)
}
pub fn to_file(&self, config_path: &str) -> Result<()> {
let mut config_file = OpenOptions::new().write(true).open(config_path)?;
let data = serde_yaml::to_string(&self).unwrap();
config_file.write(data.as_bytes())?;
Ok(())
}
}