Skip to main content

mcp_compressor_core/ffi/
oauth.rs

1use std::path::PathBuf;
2
3use serde::{Deserialize, Serialize};
4
5use crate::oauth::{
6    clear_oauth_store, list_oauth_stores, oauth_store_root, remember_oauth_store,
7    OAuthStoreIndexEntry,
8};
9use crate::Error;
10
11#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
12pub struct FfiOAuthStoreEntry {
13    pub backend_name: String,
14    pub backend_uri: String,
15    pub store_dir: PathBuf,
16}
17
18pub fn oauth_store_path() -> PathBuf {
19    oauth_store_root()
20}
21
22pub fn remember_oauth_backend(
23    backend_uri: &str,
24    backend_name: &str,
25    store_dir: PathBuf,
26) -> Result<(), Error> {
27    remember_oauth_store(backend_uri, backend_name, &store_dir).map_err(Error::Io)
28}
29
30pub fn list_oauth_credentials() -> Result<Vec<FfiOAuthStoreEntry>, Error> {
31    list_oauth_stores()
32        .map(|entries| entries.into_iter().map(Into::into).collect())
33        .map_err(Error::Io)
34}
35
36pub fn clear_oauth_credentials(target: Option<&str>) -> Result<Vec<PathBuf>, Error> {
37    clear_oauth_store(target).map_err(Error::Io)
38}
39
40impl From<OAuthStoreIndexEntry> for FfiOAuthStoreEntry {
41    fn from(value: OAuthStoreIndexEntry) -> Self {
42        Self {
43            backend_name: value.name,
44            backend_uri: value.uri,
45            store_dir: value.store_dir.into(),
46        }
47    }
48}