1use std::collections::HashMap;
2use stepflow::prelude::*;
3use stepflow::object::{ObjectStore, IdError};
4use stepflow::data::{StateData, VarId};
5use stepflow::Error;
6
7
8pub struct StateDataSerde {
9 data: HashMap<String, String>,
10}
11
12impl StateDataSerde {
13 pub fn new(data: HashMap<String, String>) -> Self {
14 StateDataSerde { data }
15 }
16
17 pub fn to_statedata(self, var_store: &ObjectStore<Box<dyn Var + Send + Sync>, VarId>) -> Result<StateData, Error> {
18 let mut state_data = StateData::new();
19 for (var_name, val_str) in self.data {
20 let var = var_store.get_by_name(&var_name[..]).ok_or_else(|| Error::VarId(IdError::NoSuchName(var_name)))?;
21 let val = var.value_from_str(&val_str[..])?;
22 state_data.insert(var, val)?;
23 }
24 Ok(state_data)
25 }
26}