diff options
Diffstat (limited to 'src/config')
| -rw-r--r-- | src/config/conversation.rs | 9 | ||||
| -rw-r--r-- | src/config/message.rs | 3 | ||||
| -rw-r--r-- | src/config/mod.rs | 88 | ||||
| -rw-r--r-- | src/config/role.rs | 2 |
4 files changed, 51 insertions, 51 deletions
diff --git a/src/config/conversation.rs b/src/config/conversation.rs index 8343400..b9a0793 100644 --- a/src/config/conversation.rs +++ b/src/config/conversation.rs @@ -43,11 +43,12 @@ impl Conversation { self.tokens = num_tokens_from_messages(&self.build_emssages("")); } + #[allow(clippy::unnecessary_wraps)] pub fn add_message(&mut self, input: &str, output: &str) -> Result<()> { let mut need_add_msg = true; if self.messages.is_empty() { if let Some(role) = self.role.as_ref() { - self.messages.extend(role.build_emssages(input)); + self.messages.extend(role.build_messages(input)); need_add_msg = false; } } @@ -67,15 +68,15 @@ impl Conversation { pub fn echo_messages(&self, content: &str) -> String { let messages = self.build_emssages(content); - serde_yaml::to_string(&messages).unwrap_or("Unable to echo message".into()) + serde_yaml::to_string(&messages).unwrap_or_else(|_| "Unable to echo message".into()) } pub fn build_emssages(&self, content: &str) -> Vec<Message> { - let mut messages = self.messages.to_vec(); + let mut messages = self.messages.clone(); let mut need_add_msg = true; if messages.is_empty() { if let Some(role) = self.role.as_ref() { - messages = role.build_emssages(content); + messages = role.build_messages(content); need_add_msg = false; } }; diff --git a/src/config/message.rs b/src/config/message.rs index 2c8a330..3c23634 100644 --- a/src/config/message.rs +++ b/src/config/message.rs @@ -17,6 +17,7 @@ impl Message { } } +#[allow(clippy::module_name_repetitions)] #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "snake_case")] pub enum MessageRole { @@ -45,6 +46,6 @@ mod tests { assert_eq!( serde_json::to_string(&Message::new("Hello World")).unwrap(), "{\"role\":\"user\",\"content\":\"Hello World\"}" - ) + ); } } diff --git a/src/config/mod.rs b/src/config/mod.rs index aec9c93..6e68283 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -45,6 +45,7 @@ const SET_COMPLETIONS: [&str; 8] = [ ".set dry_run false", ]; +#[allow(clippy::struct_excessive_bools)] #[derive(Debug, Clone, Deserialize)] #[serde(default)] pub struct Config { @@ -109,6 +110,7 @@ impl Default for Config { } } +#[allow(clippy::module_name_repetitions)] pub type SharedConfig = Arc<RwLock<Config>>; impl Config { @@ -119,7 +121,7 @@ impl Config { create_config_file(&config_path)?; } let mut config = if api_key.is_some() && !config_path.exists() { - Default::default() + Self::default() } else { Self::load_config(&config_path)? }; @@ -156,13 +158,12 @@ impl Config { pub fn config_dir() -> Result<PathBuf> { let env_name = get_env_name("config_dir"); - let path = match env::var_os(env_name) { - Some(v) => PathBuf::from(v), - None => { - let mut dir = dirs::config_dir().ok_or_else(|| anyhow!("Not found config dir"))?; - dir.push(env!("CARGO_CRATE_NAME")); - dir - } + let path = if let Some(v) = env::var_os(env_name) { + PathBuf::from(v) + } else { + let mut dir = dirs::config_dir().ok_or_else(|| anyhow!("Not found config dir"))?; + dir.push(env!("CARGO_CRATE_NAME")); + dir }; Ok(path) } @@ -186,18 +187,17 @@ impl Config { None => { format!("# CHAT:[{timestamp}]\n{input}\n--------\n{output}\n--------\n\n",) } + Some(v) if v.is_temp() => { + format!( + "# CHAT:[{timestamp}]\n{}\n{input}\n--------\n{output}\n--------\n\n", + v.prompt + ) + } Some(v) => { - if v.is_temp() { - format!( - "# CHAT:[{timestamp}]\n{}\n{input}\n--------\n{output}\n--------\n\n", - v.prompt - ) - } else { - format!( - "# CHAT:[{timestamp}] ({})\n{input}\n--------\n{output}\n--------\n\n", - v.name, - ) - } + format!( + "# CHAT:[{timestamp}] ({})\n{input}\n--------\n{output}\n--------\n\n", + v.name, + ) } }; file.write_all(output.as_bytes()) @@ -216,11 +216,10 @@ impl Config { pub fn roles_file() -> Result<PathBuf> { let env_name = get_env_name("roles_file"); - if let Ok(value) = env::var(env_name) { - Ok(PathBuf::from(value)) - } else { - Self::local_file(ROLES_FILE_NAME) - } + env::var(env_name).map_or_else( + |_| Self::local_file(ROLES_FILE_NAME), + |value| Ok(PathBuf::from(value)), + ) } pub fn history_file() -> Result<PathBuf> { @@ -237,8 +236,8 @@ impl Config { if let Some(conversation) = self.conversation.as_mut() { conversation.update_role(&role)?; } - let output = - serde_yaml::to_string(&role).unwrap_or("Unable to echo role details".into()); + let output = serde_yaml::to_string(&role) + .unwrap_or_else(|_| "Unable to echo role details".into()); self.role = Some(role); Ok(output) } @@ -271,6 +270,7 @@ impl Config { } pub fn echo_messages(&self, content: &str) -> String { + #[allow(clippy::option_if_let_else)] if let Some(conversation) = self.conversation.as_ref() { conversation.echo_messages(content) } else if let Some(role) = self.role.as_ref() { @@ -280,7 +280,7 @@ impl Config { } } - pub fn get_connect_timeout(&self) -> Duration { + pub const fn get_connect_timeout(&self) -> Duration { Duration::from_secs(self.connect_timeout as u64) } @@ -289,10 +289,11 @@ impl Config { } pub fn build_messages(&self, content: &str) -> Result<Vec<Message>> { + #[allow(clippy::option_if_let_else)] let messages = if let Some(conversation) = self.conversation.as_ref() { conversation.build_emssages(content) } else if let Some(role) = self.role.as_ref() { - role.build_emssages(content) + role.build_messages(content) } else { let message = Message::new(content); vec![message] @@ -314,7 +315,7 @@ impl Config { Ok(()) } - pub fn get_reamind_tokens(&self) -> usize { + pub const fn get_reamind_tokens(&self) -> usize { let mut tokens = self.model.1; if let Some(conversation) = self.conversation.as_ref() { tokens = tokens.saturating_sub(conversation.tokens); @@ -330,21 +331,17 @@ impl Config { let proxy = self .proxy .as_ref() - .map(|v| v.to_string()) - .unwrap_or("-".into()); + .map_or_else(|| String::from("-"), std::string::ToString::to_string); let temperature = self .temperature - .map(|v| v.to_string()) - .unwrap_or("-".into()); + .map_or_else(|| String::from("-"), |v| v.to_string()); let (api_key, organization_id) = self.get_api_key(); let api_key = mask_text(&api_key, 3, 4); - let organization_id = organization_id - .map(|v| mask_text(&v, 3, 4)) - .unwrap_or("-".into()); + let organization_id = organization_id.map_or_else(|| "-".into(), |v| mask_text(&v, 3, 4)); let items = vec![ - ("config_file", file_info(&Config::config_file()?)), - ("roles_file", file_info(&Config::roles_file()?)), - ("messages_file", file_info(&Config::messages_file()?)), + ("config_file", file_info(&Self::config_file()?)), + ("roles_file", file_info(&Self::roles_file()?)), + ("messages_file", file_info(&Self::messages_file()?)), ("api_key", api_key), ("organization_id", organization_id), ("model", self.model.0.to_string()), @@ -371,8 +368,8 @@ impl Config { .map(|v| format!(".role {}", v.name)) .collect(); - completion.extend(SET_COMPLETIONS.map(|v| v.to_string())); - completion.extend(MODELS.map(|(v, _)| format!(".model {}", v))); + completion.extend(SET_COMPLETIONS.map(std::string::ToString::to_string)); + completion.extend(MODELS.map(|(v, _)| format!(".model {v}"))); completion } @@ -441,7 +438,7 @@ impl Config { Ok(()) } - pub fn get_render_options(&self) -> (bool, bool) { + pub const fn get_render_options(&self) -> (bool, bool) { (self.highlight, self.light_theme) } @@ -449,13 +446,14 @@ impl Config { if self.dry_run { if let Ok(messages) = self.build_messages(input) { let tokens = num_tokens_from_messages(&messages); - println!(">>> The following message consumes {tokens} tokens.") + println!(">>> The following message consumes {tokens} tokens."); } } } + #[allow(clippy::unused_self)] // TODO: do we need to take self here? it's not used in the fn fn open_message_file(&self) -> Result<File> { - let path = Config::messages_file()?; + let path = Self::messages_file()?; ensure_parent_exists(&path)?; OpenOptions::new() .create(true) @@ -468,7 +466,7 @@ impl Config { let content = read_to_string(config_path) .with_context(|| format!("Failed to load config at {}", config_path.display()))?; - let config: Config = serde_yaml::from_str(&content) + let config: Self = serde_yaml::from_str(&content) .with_context(|| format!("Invalid config at {}", config_path.display()))?; Ok(config) } diff --git a/src/config/role.rs b/src/config/role.rs index 2def03d..32ade08 100644 --- a/src/config/role.rs +++ b/src/config/role.rs @@ -55,7 +55,7 @@ impl Role { } } - pub fn build_emssages(&self, content: &str) -> Vec<Message> { + pub fn build_messages(&self, content: &str) -> Vec<Message> { if self.embeded() { let content = merge_prompt_content(&self.prompt, content); vec