use std::time::Duration;
use salvo::prelude::*;
use serde::{Deserialize, Serialize};
use crate::client::account::{LoginType, RegistrationKind};
use crate::client::uiaa::AuthData;
use crate::{OwnedClientSecret, OwnedDeviceId, OwnedSessionId, OwnedUserId};
#[derive(ToSchema, Deserialize, Default, Debug)]
pub struct RegisterReqBody {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub password: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub username: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub device_id: Option<OwnedDeviceId>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub initial_device_display_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub auth: Option<AuthData>,
#[salvo(parameter(parameter_in = Query))]
#[serde(default, skip_serializing_if = "crate::serde::is_default")]
pub kind: RegistrationKind,
#[serde(default, skip_serializing_if = "crate::serde::is_default")]
pub inhibit_login: bool,
#[serde(default, rename = "type", skip_serializing_if = "Option::is_none")]
pub login_type: Option<LoginType>,
#[serde(default, skip_serializing_if = "crate::serde::is_default")]
pub refresh_token: bool,
}
impl RegisterReqBody {
pub fn is_default(&self) -> bool {
self.password.is_none()
&& self.username.is_none()
&& self.device_id.is_none()
&& self.initial_device_display_name.is_none()
&& self.auth.is_none()
&& self.kind == Default::default()
&& !self.inhibit_login
&& self.login_type.is_none()
&& !self.refresh_token
}
}
#[derive(ToSchema, Serialize, Debug)]
pub struct RegisterResBody {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub access_token: Option<String>,
pub user_id: OwnedUserId,
pub device_id: Option<OwnedDeviceId>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub refresh_token: Option<String>,
#[serde(
with = "palpo_core::serde::duration::opt_ms",
default,
skip_serializing_if = "Option::is_none",
rename = "expires_in_ms"
)]
pub expires_in: Option<Duration>,
}
#[derive(ToSchema, Serialize, Debug)]
pub struct AvailableResBody {
pub available: bool,
}
impl AvailableResBody {
pub fn new(available: bool) -> Self {
Self { available }
}
}
#[derive(ToSchema, Deserialize, Debug)]
pub struct ValidateTokenReqBody {
pub registration_token: String,
}
#[derive(ToSchema, Serialize, Debug)]
pub struct ValidateTokenResBody {
pub valid: bool,
}
#[derive(ToSchema, Deserialize, Debug)]
pub struct TokenVisEmailReqBody {
pub client_secret: OwnedClientSecret,
pub email: String,
pub send_attempt: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub next_link: Option<String>,
}
#[derive(ToSchema, Serialize, Debug)]
pub struct TokenVisEmailResBody {
pub sid: OwnedSessionId,
#[serde(
skip_serializing_if = "Option::is_none",
default,
deserialize_with = "crate::serde::empty_string_as_none"
)]
pub submit_url: Option<String>,
}
#[derive(ToSchema, Deserialize, Debug)]
pub struct TokenVisMsisdnReqBody {
pub client_secret: OwnedClientSecret,
pub country: String,
pub phone_number: String,
pub send_attempt: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub next_link: Option<String>,
}
#[derive(ToSchema, Serialize, Debug)]
pub struct TokenVisMsisdnResBody {
pub sid: OwnedSessionId,
#[serde(
skip_serializing_if = "Option::is_none",
default,
deserialize_with = "crate::serde::empty_string_as_none"
)]
pub submit_url: Option<String>,
}