use serde::{Deserialize, Serialize};
use crate::ApiKey;
use crate::Client;
use crate::DeleteAttribute;
use crate::Endpoint;
use crate::ProviderUserInfo;
use crate::Result;
#[derive(Serialize)]
pub struct UpdateProfileRequestBodyPayload {
#[serde(rename = "idToken")]
id_token: String,
#[serde(rename = "displayName")]
display_name: Option<String>,
#[serde(rename = "photoUrl")]
photo_url: Option<String>,
#[serde(rename = "deleteAttribute")]
delete_attribute: Option<Vec<String>>,
#[serde(rename = "returnSecureToken")]
return_secure_token: bool,
}
impl UpdateProfileRequestBodyPayload {
pub fn new(
id_token: String,
display_name: Option<String>,
photo_url: Option<String>,
delete_attribute: Option<Vec<DeleteAttribute>>,
return_secure_token: bool,
) -> Self {
let delete_attribute = match delete_attribute {
| Some(delete_attribute) => Some(
delete_attribute
.into_iter()
.map(|attribute| attribute.format().to_string())
.collect(),
),
| None => None,
};
Self {
id_token,
display_name,
photo_url,
delete_attribute,
return_secure_token,
}
}
}
#[derive(Deserialize, Debug)]
pub struct UpdateProfileResponsePayload {
#[serde(rename = "localId")]
pub local_id: String,
#[serde(rename = "email")]
pub email: String,
#[serde(rename = "displayName")]
pub display_name: Option<String>,
#[serde(rename = "photoUrl")]
pub photo_url: Option<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 update_profile(
client: &Client,
api_key: &ApiKey,
request_payload: UpdateProfileRequestBodyPayload,
) -> Result<UpdateProfileResponsePayload> {
client.send_post::<
UpdateProfileRequestBodyPayload,
UpdateProfileResponsePayload,
>(
Endpoint::Update,
api_key,
request_payload,
None,
)
.await
}