use serde::{Deserialize, Serialize};
use crate::ApiKey;
use crate::Client;
use crate::Endpoint;
use crate::LanguageCode;
use crate::ProviderUserInfo;
use crate::Result;
#[derive(Serialize)]
pub struct ChangeEmailRequestBodyPayload {
#[serde(rename = "idToken")]
id_token: String,
#[serde(rename = "email")]
email: String,
#[serde(rename = "returnSecureToken")]
return_secure_token: bool,
}
impl ChangeEmailRequestBodyPayload {
pub fn new(
id_token: String,
email: String,
return_secure_token: bool,
) -> Self {
Self {
id_token,
email,
return_secure_token,
}
}
}
#[derive(Deserialize, Debug)]
pub struct ChangeEmailResponsePayload {
#[serde(rename = "localId")]
pub local_id: String,
#[serde(rename = "email")]
pub email: String,
#[serde(rename = "passwordHash")]
pub password_hash: String,
#[serde(rename = "providerUserInfo")]
pub provider_user_info: Vec<ProviderUserInfo>,
#[serde(rename = "idToken")]
pub id_token: Option<String>,
#[serde(rename = "refreshToken")]
pub refresh_token: Option<String>,
#[serde(rename = "expiresIn")]
pub expires_in: Option<String>,
}
pub async fn change_email(
client: &Client,
api_key: &ApiKey,
request_payload: ChangeEmailRequestBodyPayload,
locale: Option<LanguageCode>,
) -> Result<ChangeEmailResponsePayload> {
client
.send_post::<ChangeEmailRequestBodyPayload, ChangeEmailResponsePayload>(
Endpoint::Update,
api_key,
request_payload,
locale,
)
.await
}