use async_trait::async_trait;
use reqwest::{Client, Response};
use serde::{Serialize, Deserialize};
use crate::api::traits::{BearerToken, Fetch};
use crate::api::supabase::{SUPABASE_API_ENDPOINT_V1, SupabaseApi};
use crate::error::FluxError;
#[derive(Serialize, Deserialize, Debug)]
pub struct SupabaseSelect {
pub ref_id: String,
pub token: Option<String>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct SupabaseSecret {
pub name: String,
pub value: String,
}
impl BearerToken for SupabaseSelect {
fn bearer_token(&self) -> Option<String> {
self.token.clone()
}
}
impl SupabaseApi for SupabaseSelect {}
#[async_trait]
impl Fetch for SupabaseSelect {
async fn fetch(&self, client: &Client) -> Result<Response, FluxError> {
let token = self.resolve_token()?;
let url = format!("{}/projects/{}/secrets", SUPABASE_API_ENDPOINT_V1, self.ref_id);
client.get(&url)
.bearer_auth(token)
.send()
.await
.map_err(FluxError::from_reqwest_error)
}
}