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
9use serde::{Deserialize, Serialize};
10
11use crate::ttl::Ttl;
12
13#[derive(Debug, Clone, Serialize, Deserialize, Default)]
15#[serde(default)]
16pub struct Config {
17 pub editor: EditorConfig,
19 pub open: OpenConfig,
21 pub hooks: HooksConfig,
23 pub workspace: WorkspaceConfig,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize, Default)]
29#[serde(default)]
30pub struct WorkspaceConfig {
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub ttl: Option<Ttl>,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize, Default)]
38pub struct HooksConfig {
39 #[serde(rename = "pre:open", skip_serializing_if = "Option::is_none", default)]
41 pub pre_open: Option<String>,
42 #[serde(rename = "post:open", skip_serializing_if = "Option::is_none", default)]
44 pub post_open: Option<String>,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize, Default)]
49#[serde(default)]
50pub struct EditorConfig {
51 pub command: Option<String>,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
57#[serde(default)]
58pub struct OpenConfig {
59 pub editor: bool,
61}
62
63impl Default for OpenConfig {
64 fn default() -> Self {
65 Self { editor: true }
66 }
67}
68
69#[cfg(test)]
70mod tests {
71 use super::*;
72 #[test]
73 fn test_config_default() {
74 let c = Config::default();
75 assert!(c.editor.command.is_none());
76 assert!(c.open.editor);
77 assert!(c.hooks.pre_open.is_none());
78 }
79 #[test]
80 fn test_editor_config_default() {
81 assert!(EditorConfig::default().command.is_none());
82 }
83 #[test]
84 fn test_open_config_default() {
85 assert!(OpenConfig::default().editor);
86 }
87}