1use std::path::{Path, PathBuf};
2
3use crate::config::{Expand, Shelling};
4
5#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
6pub struct TableConfig {
7 pub defines: Option<Vec<String>>,
8 pub includes: Option<Vec<String>>,
9 pub sources: Option<Vec<String>>,
10 pub link_paths: Option<Vec<String>>,
11 pub link_libraires: Option<Vec<String>>,
12 pub link_options: Option<Vec<String>>,
13 pub compile_options: Option<Vec<String>>,
14 pub compile_features: Option<Vec<String>>,
15}
16
17impl<P: AsRef<Path>> Shelling<anyhow::Result<Table>, P> for TableConfig {
18 fn shelling(self, base: P) -> anyhow::Result<Table> {
19 Ok(Table {
20 defines: self.defines.unwrap_or_default(),
21 includes: self.includes.unwrap_or_default().expand(&base)?,
22 sources: self.sources.unwrap_or_default().expand(&base)?,
23 link_paths: self.link_paths.unwrap_or_default().expand(&base)?,
24 link_libraires: self.link_libraires.unwrap_or_default(),
25 link_options: self.link_options.unwrap_or_default(),
26 compile_options: self.compile_options.unwrap_or_default(),
27 compile_features: self.compile_features.unwrap_or_default(),
28 })
29 }
30}
31
32#[derive(Debug, Clone)]
33pub struct Table {
34 pub defines: Vec<String>,
35 pub includes: Vec<PathBuf>,
36 pub sources: Vec<PathBuf>,
37 pub link_paths: Vec<PathBuf>,
38 pub link_libraires: Vec<String>,
39 pub link_options: Vec<String>,
40 pub compile_options: Vec<String>,
41 pub compile_features: Vec<String>,
42}
43
44#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
45pub struct ModeTableConfig {
46 pub debug: Option<TableConfig>,
47 pub release: Option<TableConfig>,
48}
49
50impl<P: AsRef<Path>> Shelling<anyhow::Result<ModeTable>, P> for ModeTableConfig {
51 fn shelling(self, base: P) -> anyhow::Result<ModeTable> {
52 Ok(ModeTable {
53 debug: self.debug.unwrap_or_default().shelling(&base)?,
54 release: self.release.unwrap_or_default().shelling(&base)?,
55 })
56 }
57}
58
59#[derive(Debug, Clone)]
60pub struct ModeTable {
61 pub debug: Table,
62 pub release: Table,
63}