bricks/config/
brick.rs

1use std::fmt::Display;
2
3use serde::{Deserialize, Serialize};
4
5use super::{overrides::Overrides, platform::Platform};
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub enum BrickKind {
9    #[serde(alias = "binary")]
10    #[serde(alias = "bin")]
11    Binary,
12    #[serde(alias = "library")]
13    #[serde(alias = "lib")]
14    Library,
15}
16
17impl Display for BrickKind {
18    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
19        match self {
20            BrickKind::Binary => write!(f, "bin"),
21            BrickKind::Library => write!(f, "lib"),
22        }
23    }
24}
25
26#[derive(Debug, Serialize, Deserialize, Clone, Copy)]
27pub enum BrickLang {
28    #[serde(alias = "c")]
29    C,
30    #[serde(alias = "cpp")]
31    #[serde(alias = "c++")]
32    CPP,
33}
34
35impl Display for BrickLang {
36    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
37        match self {
38            BrickLang::C => write!(f, "c"),
39            BrickLang::CPP => write!(f, "c++"),
40        }
41    }
42}
43
44#[derive(Debug, Serialize, Deserialize)]
45pub struct Brick {
46    pub name: String,
47    pub kind: BrickKind,
48    pub lang: BrickLang,
49    pub edition: String,
50    #[serde(default = "default_cflags")]
51    pub cflags: String,
52    #[serde(default = "default_ldflags")]
53    pub ldflags: String,
54    pub overrides: Option<Overrides>,
55
56    macos: Option<Platform>,
57    windows: Option<Platform>,
58    linux: Option<Platform>,
59}
60
61impl Brick {
62    pub fn platform(&self) -> Option<&Platform> {
63        if cfg!(target_os = "linux") {
64            self.linux.as_ref()
65        } else if cfg!(target_os = "macos") {
66            self.macos.as_ref()
67        } else if cfg!(target_os = "windows") {
68            self.windows.as_ref()
69        } else {
70            None
71        }
72    }
73}
74
75fn default_cflags() -> String {
76    "".into()
77}
78
79fn default_ldflags() -> String {
80    "".into()
81}