corundum_framework_update/
package.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
7pub struct PackageStatus {
8 pub current: Option<semver::Version>,
10 pub state: PackageState,
12}
13
14#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
16pub enum PackageState {
17 Idle,
19 Checking,
21 UpToDate,
23 Downloading {
25 percent: u8,
27 },
28 Ready {
30 version: semver::Version,
32 },
33 Failed(String),
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn the_state_round_trips_through_json() {
43 for state in [
44 PackageState::Idle,
45 PackageState::Downloading { percent: 40 },
46 PackageState::Ready {
47 version: semver::Version::new(1, 2, 3),
48 },
49 PackageState::Failed("offline".to_owned()),
50 ] {
51 let status = PackageStatus {
52 current: Some(semver::Version::new(1, 0, 0)),
53 state,
54 };
55 let json = serde_json::to_string(&status).unwrap();
56 assert_eq!(
57 serde_json::from_str::<PackageStatus>(&json).unwrap(),
58 status
59 );
60 }
61 }
62}