1use serde::{Deserialize, Serialize};
2use std::path::PathBuf;
3
4#[derive(Debug, Deserialize, Serialize, Default)]
5#[serde(rename_all = "kebab-case")]
6pub struct Config {
7 pub current_version: Option<String>,
8 #[serde(default, skip_serializing_if = "Option::is_none")]
9 pub context_lines: Option<usize>,
10 #[serde(default)]
11 pub default_kind: FileKind,
12 #[serde(default)]
13 pub on_invalid_version: OnInvalidVersion,
14 #[serde(default)]
15 pub git: GitConfig,
16 #[serde(default, rename = "file")]
17 pub files: Vec<FileConfig>,
18}
19
20#[derive(Debug, Deserialize, Serialize, Default)]
21#[serde(rename_all = "kebab-case")]
22pub struct GitConfig {
23 #[serde(default)]
24 pub action: GitAction,
25 #[serde(default)]
26 pub run_pre_commit: RunPreCommit,
27 #[serde(default = "default_tag_template")]
28 pub tag_template: String,
29 #[serde(default = "default_commit_template")]
30 pub commit_template: String,
31}
32
33fn default_tag_template() -> String {
34 "{new-version}".to_string()
35}
36
37fn default_commit_template() -> String {
38 "Bump version from {current-version} to {new-version}".to_string()
39}
40
41#[derive(Debug, Deserialize, Serialize)]
42pub struct FileConfig {
43 pub src: PathBuf,
44 #[serde(default, skip_serializing_if = "Option::is_none")]
45 pub kind: Option<FileKind>,
46}
47
48#[derive(Debug, Deserialize, Serialize, Default, Clone, Copy, PartialEq, Eq)]
49#[serde(rename_all = "lowercase")]
50pub enum FileKind {
51 #[default]
52 Any,
53 Simple,
54 Python,
55 Semver,
56}
57
58#[derive(Debug, Deserialize, Serialize, Default, Clone, Copy, PartialEq, Eq)]
59#[serde(rename_all = "lowercase")]
60pub enum OnInvalidVersion {
61 #[default]
62 Error,
63 Cast,
64}
65
66#[derive(Debug, Deserialize, Serialize, Default, Clone, Copy, PartialEq, Eq)]
67#[serde(rename_all = "kebab-case")]
68pub enum RunPreCommit {
69 Enabled,
70 Disabled,
71 #[default]
72 WhenPresent,
73}
74
75#[derive(Debug, Deserialize, Serialize, Default, Clone, Copy, PartialEq, Eq)]
76#[serde(rename_all = "kebab-case")]
77pub enum GitAction {
78 Disabled,
79 Commit,
80 #[default]
81 CommitAndTag,
82 CommitTagAndPush,
83}