about summary refs log tree commit diff stats
path: root/src/config/definitions.rs
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-08-24 11:27:31 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-08-24 11:45:28 +0200
commit43522ef7898c60ffd3e7c5ff056fd765635bbc5c (patch)
tree4c9bea495ca8e2ba779d6c9fc952f0aca7770c72 /src/config/definitions.rs
parentfeat(videos): Allow limiting the number of videos to show (diff)
downloadyt-43522ef7898c60ffd3e7c5ff056fd765635bbc5c.tar.gz
yt-43522ef7898c60ffd3e7c5ff056fd765635bbc5c.zip
fix(config): Check for wrong keys in the config file
Diffstat (limited to 'src/config/definitions.rs')
-rw-r--r--src/config/definitions.rs59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/config/definitions.rs b/src/config/definitions.rs
new file mode 100644
index 0000000..d37e6da
--- /dev/null
+++ b/src/config/definitions.rs
@@ -0,0 +1,59 @@
+// yt - A fully featured command line YouTube client
+//
+// Copyright (C) 2024 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+// This file is part of Yt.
+//
+// You should have received a copy of the License along with this program.
+// If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+
+use std::path::PathBuf;
+
+use serde::Deserialize;
+
+#[derive(Debug, Deserialize, PartialEq)]
+#[serde(deny_unknown_fields)]
+pub struct ConfigFile {
+    pub select: Option<SelectConfig>,
+    pub watch: Option<WatchConfig>,
+    pub paths: Option<PathsConfig>,
+    pub download: Option<DownloadConfig>,
+    pub update: Option<UpdateConfig>,
+}
+
+#[derive(Debug, Deserialize, PartialEq, Clone, Copy)]
+#[serde(deny_unknown_fields)]
+pub struct UpdateConfig {
+    pub max_backlog: Option<u32>,
+}
+
+#[derive(Debug, Deserialize, PartialEq, Clone)]
+#[serde(deny_unknown_fields)]
+pub struct DownloadConfig {
+    /// This will then be converted to an u64
+    pub max_cache_size: Option<String>,
+}
+
+#[derive(Debug, Deserialize, PartialEq, Clone)]
+#[serde(deny_unknown_fields)]
+pub struct SelectConfig {
+    pub playback_speed: Option<f64>,
+    pub subtitle_langs: Option<String>,
+}
+
+#[derive(Debug, Deserialize, PartialEq, Clone, Copy)]
+#[serde(deny_unknown_fields)]
+pub struct WatchConfig {
+    pub local_comments_length: Option<usize>,
+}
+
+#[derive(Debug, Deserialize, PartialEq, Clone)]
+#[serde(deny_unknown_fields)]
+pub struct PathsConfig {
+    pub download_dir: Option<PathBuf>,
+    pub mpv_config_path: Option<PathBuf>,
+    pub mpv_input_path: Option<PathBuf>,
+    pub database_path: Option<PathBuf>,
+    pub last_selection_path: Option<PathBuf>,
+}