Skip to main content

cup_cli/config/
build.rs

1use std::path::Path;
2
3use crate::config::{Language, LanguageConfig, Shelling, Table, TableConfig};
4
5#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
6pub struct BuildConfig {
7    pub jobs: Option<usize>,
8    pub languages: Option<LanguageConfig>,
9    pub debug: Option<TableConfig>,
10    pub release: Option<TableConfig>,
11}
12
13impl<P: AsRef<Path>> Shelling<anyhow::Result<Build>, P> for BuildConfig {
14    fn shelling(self, base: P) -> anyhow::Result<Build> {
15        Ok(Build {
16            jobs: self
17                .jobs
18                .map(|th| {
19                    if th == 0 {
20                        let cpus = std::thread::available_parallelism();
21                        if let Ok(cpus) = cpus { cpus.get() } else { 1 }
22                    } else {
23                        th
24                    }
25                })
26                .unwrap_or(1),
27            languages: self.languages.unwrap_or_default().shelling(&base),
28            debug: self.debug.unwrap_or_default().shelling(&base)?,
29            release: self.release.unwrap_or_default().shelling(&base)?,
30        })
31    }
32}
33
34#[derive(Debug, Clone)]
35pub struct Build {
36    pub jobs: usize,
37    pub languages: Language,
38    pub debug: Table,
39    pub release: Table,
40}