use std::collections::HashSet;
use serde::{Deserialize, Serialize};
use crate::ApiKey;
use crate::Client;
use crate::Endpoint;
use crate::ProviderId;
use crate::ProviderUserInfo;
use crate::Result;
#[derive(Serialize)]
pub struct UnlinkProviderRequestBodyPayload {
#[serde(rename = "idToken")]
id_token: String,
#[serde(rename = "deleteProvider")]
delete_provider: Vec<String>,
}
impl UnlinkProviderRequestBodyPayload {
pub fn new(
id_token: String,
delete_provider: HashSet<ProviderId>,
) -> Self {
Self {
id_token,
delete_provider: delete_provider
.into_iter()
.map(|provider_id| provider_id.format())
.collect(),
}
}
}
#[derive(Deserialize, Debug)]
pub struct UnlinkProviderResponsePayload {
#[serde(rename = "localId")]
pub local_id: String,
#[serde(rename = "email")]
pub email: Option<String>,
#[serde(rename = "displayName")]
pub display_name: Option<String>,
#[serde(rename = "photoUrl")]
pub photo_url: Option<String>,
#[serde(rename = "passwordHash")]
pub password_hash: Option<String>,
#[serde(rename = "providerUserInfo")]
pub provider_user_info: Option<Vec<ProviderUserInfo>>,
#[serde(rename = "emailVerified")]
pub email_verified: bool,
}
pub async fn unlink_provider(
client: &Client,
api_key: &ApiKey,
request_payload: UnlinkProviderRequestBodyPayload,
) -> Result<UnlinkProviderResponsePayload> {
client.send_post::<
UnlinkProviderRequestBodyPayload,
UnlinkProviderResponsePayload,
>(
Endpoint::Update,
api_key,
request_payload,
None,
)
.await
}