flatpak_rs/
architecture.rs

1use serde::{Deserialize, Deserializer, Serializer};
2
3pub const I386: &str = "i386";
4pub const X86: &str = "x86_64";
5pub const AARCH64: &str = "aarch64";
6pub const ARM: &str = "arm";
7pub const ARMEB: &str = "armeb";
8pub const MIPSEL: &str = "mipsel";
9pub const MIPS64EL: &str = "mips64el";
10
11#[derive(Clone)]
12#[derive(Deserialize)]
13#[derive(Debug)]
14#[derive(Hash)]
15#[derive(PartialEq)]
16// FIXME I could not find a complete list of the architectures supported
17// by flatpak-builder. There might be others, and some in the list might not
18// be accurate.
19pub enum FlatpakArchitecture {
20    I386,
21    X86,
22    AARCH64,
23    ARM,
24    /// ARM big endian
25    ARMEB,
26    /// MIPS little endian
27    MIPSEL,
28    /// MIPS-64 little endian
29    MIPS64EL,
30}
31
32impl Default for FlatpakArchitecture {
33    fn default() -> Self {
34        FlatpakArchitecture::X86
35    }
36}
37impl FlatpakArchitecture {
38    pub fn to_string(&self) -> String {
39        match &self {
40            FlatpakArchitecture::X86 => X86.to_string(),
41            FlatpakArchitecture::I386 => I386.to_string(),
42            FlatpakArchitecture::AARCH64 => AARCH64.to_string(),
43            FlatpakArchitecture::ARM => ARM.to_string(),
44            FlatpakArchitecture::ARMEB => ARMEB.to_string(),
45            FlatpakArchitecture::MIPSEL => MIPSEL.to_string(),
46            FlatpakArchitecture::MIPS64EL => MIPS64EL.to_string(),
47        }
48    }
49
50    pub fn from_string(arch: &str) -> Result<FlatpakArchitecture, String> {
51        if arch == X86 {
52            return Ok(FlatpakArchitecture::X86);
53        }
54        if arch == I386 {
55            return Ok(FlatpakArchitecture::I386);
56        }
57        if arch == AARCH64 {
58            return Ok(FlatpakArchitecture::AARCH64);
59        }
60        if arch == ARM {
61            return Ok(FlatpakArchitecture::ARM);
62        }
63        if arch == ARMEB {
64            return Ok(FlatpakArchitecture::ARMEB);
65        }
66        if arch == MIPSEL {
67            return Ok(FlatpakArchitecture::MIPSEL);
68        }
69        if arch == MIPS64EL {
70            return Ok(FlatpakArchitecture::MIPS64EL);
71        }
72        Err(format!("Invalid architecture {}.", arch))
73    }
74}