xref: /DADK/dadk-config/src/user/mod.rs (revision cfb7b78ff5dff2a09cba93336ba222be89cbd3e1)
1 use std::path::PathBuf;
2 
3 use serde::Deserialize;
4 
5 use crate::common::{
6     target_arch::TargetArch,
7     task::{BuildConfig, CleanConfig, Dependency, InstallConfig, TaskEnv, TaskSource},
8 };
9 
10 use anyhow::Result;
11 
12 #[derive(Debug, Clone, Copy, PartialEq, Eq)]
13 pub enum UserCleanLevel {
14     /// 清理所有用户程序构建缓存
15     All,
16     /// 只在用户程序源码目录下清理
17     InSrc,
18     /// 只清理用户程序输出目录
19     Output,
20 }
21 
22 #[derive(Debug, Deserialize, PartialEq)]
23 /// 用户程序配置文件
24 pub struct UserConfigFile {
25     /// 包名
26     pub name: String,
27     /// 版本
28     pub version: String,
29     /// 包的描述
30     pub description: String,
31     /// 任务类型
32     #[serde(rename = "task-source")]
33     pub task_source: TaskSource,
34     /// 依赖的包
35     #[serde(default = "default_empty_dep")]
36     pub depends: Vec<Dependency>,
37     /// 构建配置
38     pub build: BuildConfig,
39     /// 安装配置
40     pub install: InstallConfig,
41     /// 清理配置
42     pub clean: CleanConfig,
43     /// 环境变量
44     #[serde(default = "default_empty_env")]
45     pub envs: Vec<TaskEnv>,
46 
47     /// (可选) 是否只构建一次,如果为true,DADK会在构建成功后,将构建结果缓存起来,下次构建时,直接使用缓存的构建结果。
48     #[serde(rename = "build-once", default = "default_false")]
49     pub build_once: bool,
50 
51     /// (可选) 是否只安装一次,如果为true,DADK会在安装成功后,不再重复安装。
52     #[serde(rename = "install-once", default = "default_false")]
53     pub install_once: bool,
54 
55     #[serde(rename = "target-arch")]
56     pub target_arch: Vec<TargetArch>,
57 }
58 
59 impl UserConfigFile {
60     pub fn load(path: &PathBuf) -> Result<Self> {
61         let content = std::fs::read_to_string(path)?;
62         Self::load_from_str(&content)
63     }
64 
65     pub fn load_from_str(content: &str) -> Result<Self> {
66         let config: UserConfigFile = toml::from_str(content)?;
67         Ok(config)
68     }
69 }
70 
71 fn default_empty_env() -> Vec<TaskEnv> {
72     vec![]
73 }
74 
75 fn default_empty_dep() -> Vec<Dependency> {
76     vec![]
77 }
78 
79 fn default_false() -> bool {
80     false
81 }
82