thepipelinetool_task/
task_ref_inner.rs

1use serde::{Serialize, Serializer};
2use serde_json::{json, Value};
3use std::{collections::HashSet, marker::PhantomData};
4use thepipelinetool_utils::{UPSTREAM_TASK_ID_KEY, UPSTREAM_TASK_RESULT_KEY};
5
6#[derive(Clone)]
7pub struct TaskRefInner<T: Serialize> {
8    pub task_ids: HashSet<usize>,
9    pub key: Option<String>,
10    pub _marker: PhantomData<T>,
11}
12
13impl<T: Serialize> Serialize for TaskRefInner<T> {
14    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
15    where
16        S: Serializer,
17    {
18        let mut json_value = json!({
19            UPSTREAM_TASK_ID_KEY: self.task_ids.iter().next().unwrap(),
20        });
21
22        if self.key.is_some() {
23            json_value[UPSTREAM_TASK_RESULT_KEY] = Value::String(self.key.clone().unwrap());
24        }
25
26        json_value.serialize(serializer)
27    }
28}