worktree_io/config/
mod.rs1mod ops;
2mod ops_get_set;
3mod ser;
4
5#[cfg(test)]
6#[path = "ops_tests.rs"]
7mod ops_tests;
8
9#[cfg(test)]
10#[path = "ops_auto_prune_tests.rs"]
11mod ops_auto_prune_tests;
12
13use serde::{Deserialize, Serialize};
14
15use crate::ttl::Ttl;
16
17#[derive(Debug, Clone, Serialize, Deserialize, Default)]
19#[serde(default)]
20pub struct Config {
21 pub editor: EditorConfig,
23 pub open: OpenConfig,
25 pub hooks: HooksConfig,
27 pub workspace: WorkspaceConfig,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize, Default)]
33#[serde(default)]
34pub struct WorkspaceConfig {
35 #[serde(skip_serializing_if = "Option::is_none")]
37 pub ttl: Option<Ttl>,
38 #[serde(default, skip_serializing_if = "std::ops::Not::not")]
40 pub auto_prune: bool,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, Default)]
45pub struct HooksConfig {
46 #[serde(rename = "pre:open", skip_serializing_if = "Option::is_none", default)]
48 pub pre_open: Option<String>,
49 #[serde(rename = "post:open", skip_serializing_if = "Option::is_none", default)]
51 pub post_open: Option<String>,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize, Default)]
56#[serde(default)]
57pub struct EditorConfig {
58 pub command: Option<String>,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
64#[serde(default)]
65pub struct OpenConfig {
66 pub editor: bool,
68}
69
70impl Default for OpenConfig {
71 fn default() -> Self {
72 Self { editor: true }
73 }
74}
75
76#[cfg(test)]
77mod tests {
78 use super::*;
79 #[test]
80 fn test_config_default() {
81 let c = Config::default();
82 assert!(c.editor.command.is_none());
83 assert!(c.open.editor);
84 assert!(c.hooks.pre_open.is_none());
85 }
86 #[test]
87 fn test_editor_config_default() {
88 assert!(EditorConfig::default().command.is_none());
89 }
90 #[test]
91 fn test_open_config_default() {
92 assert!(OpenConfig::default().editor);
93 }
94}