1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
use std::collections::HashMap;

use serde::{Deserialize, Serialize};

use crate::models::alloc_deployment_status::AllocDeploymentStatus;
use crate::models::reschedule_tracker::RescheduleTracker;
use crate::models::task_state::TaskState;

#[derive(Clone, Debug, Default, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct AllocationListStub {
    #[serde(rename = "ID")]
    pub id: Option<String>,
    #[serde(rename = "EvalID")]
    pub eval_id: Option<String>,
    pub name: Option<String>,
    pub namespace: Option<String>,
    #[serde(rename = "NodeID")]
    pub node_id: Option<String>,
    pub node_name: Option<String>,
    #[serde(rename = "JobID")]
    pub job_id: Option<String>,
    pub job_type: Option<String>,
    pub job_version: Option<i32>,
    pub task_group: Option<String>,
    pub desired_status: Option<String>,
    pub desired_description: Option<String>,
    pub client_status: Option<String>,
    pub client_description: Option<String>,
    pub task_states: Option<HashMap<String, TaskState>>,
    pub deployment_status: Option<AllocDeploymentStatus>,
    #[serde(rename = "FollowupEvalID")]
    pub followup_eval_id: Option<String>,
    pub reschedule_tracker: Option<RescheduleTracker>,
    pub preempted_allocations: Option<Vec<String>>,
    pub preempted_by_allocation: Option<String>,
    pub create_index: Option<i32>,
    pub modify_index: Option<i32>,
    pub create_time: Option<i64>,
    pub modify_time: Option<i64>,
}

impl AllocationListStub {
    pub fn get_task_state(&self, name: &str) -> Option<&TaskState> {
        match self.task_states {
            Some(ref state) => {
                match state.get(name) {
                    Some(task_state) => Some(task_state),
                    None => None
                }
            }
            None => None
        }
    }
}