Skip to main content

cup_cli/config/
config.rs

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}