1use serde::{Deserialize, Serialize};
4
5use crate::client::Client;
6use crate::error::Result;
7
8#[derive(Debug, Clone, Deserialize)]
10pub struct AuthUser {
11 pub id: String,
13
14 #[serde(default)]
16 pub name: Option<String>,
17
18 #[serde(default)]
20 pub email: Option<String>,
21
22 #[serde(default)]
24 pub avatar_url: Option<String>,
25}
26
27#[derive(Debug, Clone, Deserialize)]
29pub struct AuthResponse {
30 pub token: String,
32
33 pub user: AuthUser,
35}
36
37#[derive(Debug, Clone, Serialize)]
39pub struct AuthAppleRequest {
40 pub id_token: String,
42
43 #[serde(skip_serializing_if = "Option::is_none")]
45 pub name: Option<String>,
46}
47
48impl Client {
49 pub async fn auth_apple(&self, req: &AuthAppleRequest) -> Result<AuthResponse> {
55 let (resp, _meta) = self
56 .post_json::<AuthAppleRequest, AuthResponse>("/qai/v1/auth/apple", req)
57 .await?;
58 Ok(resp)
59 }
60}