Display more than one indexUid in a task view if necessary

This commit is contained in:
Loïc Lecrenier 2022-10-26 13:09:42 +02:00 committed by Clément Renault
parent 1f75caae88
commit 08b5123380
No known key found for this signature in database
GPG Key ID: 92ADA4E935E71FA4

View File

@ -32,12 +32,30 @@ pub fn configure(cfg: &mut web::ServiceConfig) {
.service(web::resource("/{task_id}").route(web::get().to(SeqHandler(get_task))));
}
#[derive(Default, Debug, Clone, PartialEq, Serialize)]
#[serde(untagged, rename_all = "camelCase")]
pub enum IndexUidView {
Multiple(Vec<String>),
Single(String),
#[default]
None,
}
impl IndexUidView {
fn new(indexes: &[&str]) -> Self {
match indexes {
[] => Self::None,
[index] => Self::Single(index.to_string()),
indexes => Self::Multiple(indexes.iter().map(ToString::to_string).collect()),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TaskView {
pub uid: TaskId,
#[serde(default)]
pub index_uid: Option<String>,
pub index_uid: IndexUidView,
pub status: Status,
#[serde(rename = "type")]
pub kind: Kind,
@ -64,7 +82,7 @@ impl TaskView {
pub fn from_task(task: &Task) -> TaskView {
TaskView {
uid: task.uid,
index_uid: task.index_uid().map(ToOwned::to_owned),
index_uid: IndexUidView::new(&task.indexes()),
status: task.status,
kind: task.kind.as_kind(),
canceled_by: task.canceled_by,