From dfebab910debf8375f1b628c0e0494399e21cecb Mon Sep 17 00:00:00 2001 From: sigoden Date: Thu, 2 Mar 2023 19:52:11 +0800 Subject: init commit --- src/config.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/config.rs (limited to 'src/config.rs') diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..5f76315 --- /dev/null +++ b/src/config.rs @@ -0,0 +1,44 @@ +use std::{fs::read_to_string, path::Path}; + +use anyhow::{anyhow, Result}; +use serde::Deserialize; + +#[derive(Debug, Clone, Deserialize)] +pub struct Config { + /// Openai api key + pub api_key: String, + /// Set proxy + pub proxy: Option, + /// Used only for debugging + #[serde(default)] + pub dry_run: bool, + /// Predefined rules + #[serde(default)] + pub roles: Vec, +} + +impl Config { + pub fn init(path: &Path) -> Result { + let content = read_to_string(path) + .map_err(|err| anyhow!("Failed to load config at {}, {err}", path.display()))?; + let config: Config = + toml::from_str(&content).map_err(|err| anyhow!("Invalid config, {err}"))?; + Ok(config) + } +} + +#[derive(Debug, Clone, Deserialize)] +pub struct Role { + /// Role name + pub name: String, + /// Prompt text send to ai for setting up a rule + pub prompt: String, + /// First sentense will append to prompt + pub first_sentense: String, +} + +impl Role { + pub fn generate(&self, text: &str) -> String { + format!("{} {} {}", self.prompt, self.first_sentense, text) + } +} -- cgit v1.2.3