#![allow(
missing_docs,
reason = "fields mirror pi's TypeScript types; contracts are noted where they differ from the name"
)]
use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};
pub type AuthFile = IndexMap<String, Credential>;
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum Credential {
#[serde(rename = "api_key")]
ApiKey(ApiKeyCredential),
#[serde(rename = "oauth")]
OAuth(OAuthCredential),
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct ApiKeyCredential {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub key: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub env: Option<IndexMap<String, String>>,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct OAuthCredential {
pub access: String,
pub refresh: String,
pub expires: u64,
#[serde(flatten)]
pub extra: Map<String, Value>,
}