Files
huike-back/htyts_models/src/req_task.rs
T
weli 44c320d8fa chore add core rust project files and diesel migrations
Track required workspace crates, scripts, and historical diesel migrations so the repository contains the complete runnable backend baseline.

Made-with: Cursor
2026-04-23 17:20:01 +08:00

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);
}
}