stepflow_serde/
data.rs

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}