1#![allow(
5 missing_docs,
6 reason = "fields mirror pi's TypeScript types; contracts are noted where they differ from the name"
7)]
8
9use indexmap::IndexMap;
10use serde::{Deserialize, Serialize};
11use serde_json::{Map, Value};
12
13pub type AuthFile = IndexMap<String, Credential>;
15
16#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
18#[serde(tag = "type")]
19pub enum Credential {
20 #[serde(rename = "api_key")]
21 ApiKey(ApiKeyCredential),
22 #[serde(rename = "oauth")]
23 OAuth(OAuthCredential),
24}
25
26#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
29pub struct ApiKeyCredential {
30 #[serde(default, skip_serializing_if = "Option::is_none")]
31 pub key: Option<String>,
32 #[serde(default, skip_serializing_if = "Option::is_none")]
34 pub env: Option<IndexMap<String, String>>,
35}
36
37#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
40pub struct OAuthCredential {
41 pub access: String,
42 pub refresh: String,
43 pub expires: u64,
45 #[serde(flatten)]
46 pub extra: Map<String, Value>,
47}