1use crate::core::config::Config;
4use anyhow::{Context, Result};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum Provider {
8 Google,
9 Anthropic,
10}
11
12pub fn save_token(provider: Provider, token: &str) -> Result<()> {
13 let mut config = Config::load().unwrap_or_default();
14 match provider {
15 Provider::Google => config.ai.google_token = Some(token.to_string()),
16 Provider::Anthropic => config.ai.anthropic_token = Some(token.to_string()),
17 }
18 config.save().context("Failed to save config")?;
19 Ok(())
20}
21
22pub fn load_token(provider: Provider) -> Result<String> {
23 let config = Config::load().unwrap_or_default();
24 match provider {
25 Provider::Google => config
26 .ai
27 .google_token
28 .context("No Google auth token found. Please run 'greppy login'."),
29 Provider::Anthropic => config
30 .ai
31 .anthropic_token
32 .context("No Anthropic auth token found. Please run 'greppy login'."),
33 }
34}
35
36pub fn delete_token(provider: Provider) -> Result<()> {
37 let mut config = Config::load().unwrap_or_default();
38 match provider {
39 Provider::Google => config.ai.google_token = None,
40 Provider::Anthropic => config.ai.anthropic_token = None,
41 }
42 config.save().context("Failed to save config")?;
43 Ok(())
44}
45
46pub fn has_token(provider: Provider) -> bool {
48 load_token(provider).is_ok()
49}
50
51pub fn delete_all_tokens() -> Result<()> {
53 let mut config = Config::load().unwrap_or_default();
54 config.ai.google_token = None;
55 config.ai.anthropic_token = None;
56 config.save().context("Failed to save config")?;
57 Ok(())
58}
59
60pub fn save_token_legacy(token: &str) -> Result<()> {
62 save_token(Provider::Google, token)
63}
64
65pub fn load_token_legacy() -> Result<String> {
66 load_token(Provider::Google)
67}
68
69pub fn delete_token_legacy() -> Result<()> {
70 delete_token(Provider::Google)
71}