1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
use std::collections::HashMap;
use std::fs::File;
use std::io::prelude::*;
use serde::{Deserialize,Serialize};
use serde_yaml;
use crate::variables::Variable;
#[derive(Debug,Deserialize,Serialize)]
pub struct VariableStorage {
variables: HashMap<String, Variable>,
}
impl VariableStorage {
pub fn new() -> Self {
Self {
variables: HashMap::new(),
}
}
pub fn load( filename: &str ) -> Result< VariableStorage, Box< dyn std::error::Error > > {
let f = std::fs::File::open( filename )?;
let vs: VariableStorage = serde_yaml::from_reader( f )?;
Ok( vs )
}
pub fn save( &self, filename: &str ) -> Result< (), Box< dyn std::error::Error > > {
let serialized = serde_yaml::to_string(&self).unwrap();
let mut f = std::fs::File::create( filename )?;
f.write_all( &serialized.as_bytes() )?;
Ok(())
}
pub fn get( &self, name: &str ) -> Option< &Variable > {
self.variables.get( name )
}
pub fn set_i32( &mut self, name: &str, value: i32 ) {
self.variables.insert( name.to_string(), Variable::I32( value ) );
}
pub fn set( &mut self, name: &str, value: Variable ) {
self.variables.insert( name.to_string(), value );
}
}