44c320d8fa
Track required workspace crates, scripts, and historical diesel migrations so the repository contains the complete runnable backend baseline. Made-with: Cursor
61 lines
2.2 KiB
Rust
61 lines
2.2 KiB
Rust
use crate::task_status::TaskStatus;
|
|
use crate::task_type::TaskType;
|
|
use chrono::NaiveDateTime;
|
|
use serde::{Deserialize, Serialize};
|
|
use serde_json::Value as JsonValue;
|
|
|
|
/// Mirrors Java `ReqTask`.
|
|
///
|
|
/// `payload` is polymorphic in Java (`Optional<Object>`); stored in Redis as JSON per task type.
|
|
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
|
|
pub struct ReqTask {
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
pub task_id: Option<String>,
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
pub hty_id: Option<String>,
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
pub created_by: Option<String>,
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
pub created_at: Option<NaiveDateTime>,
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
pub updated_by: Option<String>,
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
pub updated_at: Option<NaiveDateTime>,
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
pub task_type: Option<TaskType>,
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
pub task_status: Option<TaskStatus>,
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
pub duration: Option<f64>,
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
pub meta: Option<String>,
|
|
/// Raw JSON payload (task-type-specific struct on the wire).
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
pub payload: Option<JsonValue>,
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn serde_req_task_roundtrip() {
|
|
let sample = ReqTask {
|
|
task_id: Some("550e8400-e29b-41d4-a716-446655440000".into()),
|
|
task_type: Some(TaskType::Noop),
|
|
task_status: Some(TaskStatus::Pending),
|
|
payload: None,
|
|
hty_id: None,
|
|
created_by: None,
|
|
created_at: None,
|
|
updated_by: None,
|
|
updated_at: None,
|
|
duration: None,
|
|
meta: None,
|
|
};
|
|
let json = serde_json::to_string(&sample).expect("serialize");
|
|
let back: ReqTask = serde_json::from_str(&json).expect("deserialize");
|
|
assert_eq!(back.task_id, sample.task_id);
|
|
}
|
|
}
|