prk_async_dataflow/
transformers.rs

1use simd_json::{derived::MutableObject,  OwnedValue};
2use std::collections::HashMap;
3
4pub struct FeatureTransformer {
5    mappings: HashMap<String, Box<dyn Fn(OwnedValue) -> OwnedValue + Send + Sync>>,
6}
7
8impl FeatureTransformer {
9    pub fn new() -> Self {
10        Self {
11            mappings: HashMap::new(),
12        }
13    }
14
15    pub fn add_mapping(
16        &mut self,
17        key: String,
18        transform: Box<dyn Fn(OwnedValue) -> OwnedValue + Send + Sync>,
19    ) {
20        self.mappings.insert(key, transform);
21    }
22
23    pub fn transform<'a>(&self, mut data: OwnedValue) -> OwnedValue {
24        for (key, transform) in &self.mappings {
25            if let Some(value) = data.get_mut(key.as_str()) {
26                let new_value = transform(value.clone());
27                *value = new_value;
28            }
29        }
30        data
31    }
32}