thepipelinetool_task/
task_ref_inner.rs1use 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}