style: 格式化代码并优化导入顺序
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use anyhow::{bail, Context, Result};
|
||||
use anyhow::{Context, Result, bail};
|
||||
use std::env;
|
||||
|
||||
const SERVICE_NAME: &str = "quicommit";
|
||||
@@ -78,7 +78,8 @@ impl KeyringManager {
|
||||
let entry = keyring::Entry::new(SERVICE_NAME, provider)
|
||||
.context("Failed to create keyring entry")?;
|
||||
|
||||
entry.set_password(api_key)
|
||||
entry
|
||||
.set_password(api_key)
|
||||
.context("Failed to store API key")?;
|
||||
|
||||
Ok(())
|
||||
@@ -86,9 +87,10 @@ impl KeyringManager {
|
||||
|
||||
pub fn get_api_key(&self, provider: &str) -> Result<Option<String>> {
|
||||
if let Ok(key) = env::var(ENV_API_KEY)
|
||||
&& !key.is_empty() {
|
||||
return Ok(Some(key));
|
||||
}
|
||||
&& !key.is_empty()
|
||||
{
|
||||
return Ok(Some(key));
|
||||
}
|
||||
|
||||
if !self.is_available() {
|
||||
return Ok(None);
|
||||
@@ -112,7 +114,8 @@ impl KeyringManager {
|
||||
let entry = keyring::Entry::new(SERVICE_NAME, provider)
|
||||
.context("Failed to create keyring entry")?;
|
||||
|
||||
entry.delete_credential()
|
||||
entry
|
||||
.delete_credential()
|
||||
.context("Failed to delete API key")?;
|
||||
|
||||
Ok(())
|
||||
@@ -126,7 +129,13 @@ impl KeyringManager {
|
||||
format!("{}/{}", PAT_SERVICE_PREFIX, profile_name)
|
||||
}
|
||||
|
||||
pub fn store_pat(&self, profile_name: &str, user_email: &str, service: &str, token: &str) -> Result<()> {
|
||||
pub fn store_pat(
|
||||
&self,
|
||||
profile_name: &str,
|
||||
user_email: &str,
|
||||
service: &str,
|
||||
token: &str,
|
||||
) -> Result<()> {
|
||||
if !self.is_available() {
|
||||
bail!("Keyring is not available on this system");
|
||||
}
|
||||
@@ -137,15 +146,24 @@ impl KeyringManager {
|
||||
let entry = keyring::Entry::new(&keyring_service, &keyring_user)
|
||||
.context("Failed to create keyring entry for PAT")?;
|
||||
|
||||
entry.set_password(token)
|
||||
entry
|
||||
.set_password(token)
|
||||
.context("Failed to store PAT in keyring")?;
|
||||
|
||||
eprintln!("[DEBUG] PAT stored in keyring: service={}, user={}", keyring_service, keyring_user);
|
||||
eprintln!(
|
||||
"[DEBUG] PAT stored in keyring: service={}, user={}",
|
||||
keyring_service, keyring_user
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn get_pat(&self, profile_name: &str, user_email: &str, service: &str) -> Result<Option<String>> {
|
||||
pub fn get_pat(
|
||||
&self,
|
||||
profile_name: &str,
|
||||
user_email: &str,
|
||||
service: &str,
|
||||
) -> Result<Option<String>> {
|
||||
if !self.is_available() {
|
||||
return Ok(None);
|
||||
}
|
||||
@@ -158,11 +176,17 @@ impl KeyringManager {
|
||||
|
||||
match entry.get_password() {
|
||||
Ok(token) => {
|
||||
eprintln!("[DEBUG] PAT retrieved from keyring: service={}, user={}", keyring_service, keyring_user);
|
||||
eprintln!(
|
||||
"[DEBUG] PAT retrieved from keyring: service={}, user={}",
|
||||
keyring_service, keyring_user
|
||||
);
|
||||
Ok(Some(token))
|
||||
}
|
||||
Err(keyring::Error::NoEntry) => {
|
||||
eprintln!("[DEBUG] PAT not found in keyring: service={}, user={}", keyring_service, keyring_user);
|
||||
eprintln!(
|
||||
"[DEBUG] PAT not found in keyring: service={}, user={}",
|
||||
keyring_service, keyring_user
|
||||
);
|
||||
Ok(None)
|
||||
}
|
||||
Err(e) => Err(e.into()),
|
||||
@@ -180,22 +204,36 @@ impl KeyringManager {
|
||||
let entry = keyring::Entry::new(&keyring_service, &keyring_user)
|
||||
.context("Failed to create keyring entry for PAT")?;
|
||||
|
||||
entry.delete_credential()
|
||||
entry
|
||||
.delete_credential()
|
||||
.context("Failed to delete PAT from keyring")?;
|
||||
|
||||
eprintln!("[DEBUG] PAT deleted from keyring: service={}, user={}", keyring_service, keyring_user);
|
||||
eprintln!(
|
||||
"[DEBUG] PAT deleted from keyring: service={}, user={}",
|
||||
keyring_service, keyring_user
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn has_pat(&self, profile_name: &str, user_email: &str, service: &str) -> bool {
|
||||
self.get_pat(profile_name, user_email, service).unwrap_or(None).is_some()
|
||||
self.get_pat(profile_name, user_email, service)
|
||||
.unwrap_or(None)
|
||||
.is_some()
|
||||
}
|
||||
|
||||
pub fn delete_all_pats_for_profile(&self, profile_name: &str, user_email: &str, services: &[String]) -> Result<()> {
|
||||
pub fn delete_all_pats_for_profile(
|
||||
&self,
|
||||
profile_name: &str,
|
||||
user_email: &str,
|
||||
services: &[String],
|
||||
) -> Result<()> {
|
||||
for service in services {
|
||||
if let Err(e) = self.delete_pat(profile_name, user_email, service) {
|
||||
eprintln!("[DEBUG] Failed to delete PAT for service '{}': {}", service, e);
|
||||
eprintln!(
|
||||
"[DEBUG] Failed to delete PAT for service '{}': {}",
|
||||
service, e
|
||||
);
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
@@ -259,7 +297,14 @@ pub fn get_default_model(provider: &str) -> &'static str {
|
||||
}
|
||||
|
||||
pub fn get_supported_providers() -> &'static [&'static str] {
|
||||
&["ollama", "openai", "anthropic", "kimi", "deepseek", "openrouter"]
|
||||
&[
|
||||
"ollama",
|
||||
"openai",
|
||||
"anthropic",
|
||||
"kimi",
|
||||
"deepseek",
|
||||
"openrouter",
|
||||
]
|
||||
}
|
||||
|
||||
pub fn provider_needs_api_key(provider: &str) -> bool {
|
||||
@@ -273,10 +318,19 @@ mod tests {
|
||||
#[test]
|
||||
fn test_get_default_base_url() {
|
||||
assert_eq!(get_default_base_url("openai"), "https://api.openai.com/v1");
|
||||
assert_eq!(get_default_base_url("anthropic"), "https://api.anthropic.com/v1");
|
||||
assert_eq!(
|
||||
get_default_base_url("anthropic"),
|
||||
"https://api.anthropic.com/v1"
|
||||
);
|
||||
assert_eq!(get_default_base_url("kimi"), "https://api.moonshot.cn/v1");
|
||||
assert_eq!(get_default_base_url("deepseek"), "https://api.deepseek.com/v1");
|
||||
assert_eq!(get_default_base_url("openrouter"), "https://openrouter.ai/api/v1");
|
||||
assert_eq!(
|
||||
get_default_base_url("deepseek"),
|
||||
"https://api.deepseek.com/v1"
|
||||
);
|
||||
assert_eq!(
|
||||
get_default_base_url("openrouter"),
|
||||
"https://openrouter.ai/api/v1"
|
||||
);
|
||||
assert_eq!(get_default_base_url("ollama"), "http://localhost:11434");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user