use {
serde::{Deserialize, Deserializer, Serialize, de::Error},
serde_json::Value::{self, Null},
};
use crate::models::User;
pub fn deserialize_code<'de, D>(deserializer: D) -> Result<Option<String>, D::Error>
where
D: Deserializer<'de>,
{
let value = Value::deserialize(deserializer)?;
match value {
Value::String(s) => Ok(Some(s)),
Value::Number(n) => Ok(Some(n.to_string())),
Null => Ok(None),
_ => Err(Error::custom("Invalid code format")),
}
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct QobuzApiStatusResponse {
#[serde(rename = "code", deserialize_with = "deserialize_code")]
pub code: Option<String>,
#[serde(rename = "message")]
pub message: Option<String>,
#[serde(rename = "status")]
pub status: Option<String>,
}
impl QobuzApiStatusResponse {
pub fn new(code: Option<String>, message: Option<String>, status: Option<String>) -> Self {
QobuzApiStatusResponse {
code,
message,
status,
}
}
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Login {
#[serde(rename = "user")]
pub user: Option<User>,
#[serde(rename = "user_auth_token")]
pub auth_token: Option<String>,
}