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}