1
// Copyright 2020, Collabora Ltd.
2
// SPDX-License-Identifier: MIT OR Apache-2.0
3

            
4
// Structures used to send feedback on upgrades
5

            
6
use serde::Serialize;
7

            
8
use crate::ddi::common::{Execution, Finished};
9

            
10
#[derive(Debug, Serialize)]
11
pub(crate) struct Feedback<T: Serialize> {
12
    id: String,
13
    status: Status<T>,
14
}
15
#[derive(Debug, Serialize)]
16
struct Status<T: Serialize> {
17
    execution: Execution,
18
    result: ResultT<T>,
19
    details: Vec<String>,
20
}
21

            
22
#[derive(Debug, Serialize)]
23
pub struct ResultT<T: Serialize> {
24
    finished: Finished,
25
    #[serde(skip_serializing_if = "Option::is_none")]
26
    progress: Option<T>,
27
}
28

            
29
impl<T: Serialize> Feedback<T> {
30
6
    pub(crate) fn new(
31
6
        id: &str,
32
6
        execution: Execution,
33
6
        finished: Finished,
34
6
        progress: Option<T>,
35
6
        details: Vec<String>,
36
6
    ) -> Self {
37
6
        Self {
38
6
            id: id.to_string(),
39
6
            status: Status {
40
6
                execution,
41
6
                details,
42
6
                result: ResultT { finished, progress },
43
6
            },
44
6
        }
45
6
    }
46
}