flatpak_rs/
build_system.rs

1use serde::{Deserialize, Deserializer, Serializer};
2
3pub const AUTOTOOLS: &str = "autotools";
4pub const CMAKE: &str = "cmake";
5pub const CMAKE_NINJA: &str = "cmake-ninja";
6pub const MESON: &str = "meson";
7pub const QMAKE: &str = "qmake";
8pub const SIMPLE: &str = "simple";
9#[cfg(feature = "extended_build_sytems")]
10pub const CABAL: &str = "cabal";
11#[cfg(feature = "extended_build_sytems")]
12pub const MAKE: &str = "make";
13#[cfg(feature = "extended_build_sytems")]
14pub const CARGO: &str = "cargo";
15
16#[derive(Clone)]
17#[derive(Deserialize)]
18#[derive(Debug)]
19#[derive(Hash)]
20#[derive(PartialEq)]
21pub enum FlatpakBuildSystem {
22    Autotools,
23    CMake,
24    CMakeNinja,
25    QMake,
26    Meson,
27    Simple,
28    #[cfg(feature = "extended_build_sytems")]
29    Cabal,
30    #[cfg(feature = "extended_build_sytems")]
31    Make,
32    #[cfg(feature = "extended_build_sytems")]
33    Cargo,
34}
35
36impl Default for FlatpakBuildSystem {
37    fn default() -> Self {
38        FlatpakBuildSystem::Simple
39    }
40}
41impl FlatpakBuildSystem {
42    pub fn to_string(&self) -> String {
43        match &self {
44            FlatpakBuildSystem::Autotools => AUTOTOOLS.to_string(),
45            FlatpakBuildSystem::CMake => CMAKE.to_string(),
46            FlatpakBuildSystem::CMakeNinja => CMAKE_NINJA.to_string(),
47            FlatpakBuildSystem::QMake => QMAKE.to_string(),
48            FlatpakBuildSystem::Meson => MESON.to_string(),
49            FlatpakBuildSystem::Simple => SIMPLE.to_string(),
50            #[cfg(feature = "extended_build_sytems")]
51            FlatpakBuildSystem::Cabal => CABAL.to_string(),
52            #[cfg(feature = "extended_build_sytems")]
53            FlatpakBuildSystem::Make => MAKE.to_string(),
54            #[cfg(feature = "extended_build_sytems")]
55            FlatpakBuildSystem::Cargo => CARGO.to_string(),
56        }
57    }
58
59    pub fn from_string(build_sys: &str) -> Result<FlatpakBuildSystem, String> {
60        if build_sys == AUTOTOOLS {
61            return Ok(FlatpakBuildSystem::Autotools);
62        }
63        if build_sys == CMAKE {
64            return Ok(FlatpakBuildSystem::CMake);
65        }
66        if build_sys == CMAKE_NINJA {
67            return Ok(FlatpakBuildSystem::CMakeNinja);
68        }
69        if build_sys == QMAKE {
70            return Ok(FlatpakBuildSystem::QMake);
71        }
72        if build_sys == MESON {
73            return Ok(FlatpakBuildSystem::Meson);
74        }
75        if build_sys == SIMPLE {
76            return Ok(FlatpakBuildSystem::Simple);
77        }
78        #[cfg(feature = "extended_build_sytems")]
79        if build_sys == CABAL {
80            return Ok(FlatpakBuildSystem::Cabal);
81        }
82        #[cfg(feature = "extended_build_sytems")]
83        if build_sys == MAKE {
84            return Ok(FlatpakBuildSystem::Make);
85        }
86        #[cfg(feature = "extended_build_sytems")]
87        if build_sys == CARGO {
88            return Ok(FlatpakBuildSystem::Cargo);
89        }
90        Err(format!("Invalid build system {}.", build_sys))
91    }
92
93    pub fn serialize<S>(x: &Option<FlatpakBuildSystem>, s: S) -> Result<S::Ok, S::Error>
94    where
95        S: Serializer,
96    {
97        if let Some(build_system) = x {
98            return s.serialize_str(&build_system.to_string());
99        }
100        panic!("This should not happen.");
101    }
102
103    pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<FlatpakBuildSystem>, D::Error>
104    where
105        D: Deserializer<'de>,
106    {
107        let buf = String::deserialize(deserializer)?;
108
109        match FlatpakBuildSystem::from_string(&buf) {
110            Ok(b) => Ok(Some(b)),
111            Err(e) => Err(e).map_err(serde::de::Error::custom),
112        }
113    }
114}