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
use std::collections::HashMap; use stepflow::prelude::*; use stepflow::object::{ObjectStore, IdError}; use stepflow::data::{StateData, VarId}; use stepflow::Error; pub struct StateDataSerde { data: HashMap<String, String>, } impl StateDataSerde { pub fn new(data: HashMap<String, String>) -> Self { StateDataSerde { data } } pub fn to_statedata(self, var_store: &ObjectStore<Box<dyn Var + Send + Sync>, VarId>) -> Result<StateData, Error> { let mut state_data = StateData::new(); for (var_name, val_str) in self.data { let var = var_store.get_by_name(&var_name[..]).ok_or_else(|| Error::VarId(IdError::NoSuchName(var_name)))?; let val = var.value_from_str(&val_str[..])?; state_data.insert(var, val)?; } Ok(state_data) } }