jensmemesclient/tokencracker/src/api.rs

43 lines
1001 B
Rust

use serde::de::{Error, Unexpected, Visitor};
use core::fmt::Formatter;
use serde::{Deserialize, Deserializer};
#[derive(Deserialize, Debug)]
pub struct UserResponse {
pub status: u16,
pub user: JensmemesUser,
}
#[derive(Deserialize, Debug)]
pub struct JensmemesUser {
pub name: String,
pub tokenhash: String,
pub userdir: String,
pub id: String,
#[serde(deserialize_with = "deserialize_uploads")]
pub dayuploads: u32,
}
fn deserialize_uploads<'de, D>(de: D) -> Result<u32, D::Error>
where
D: Deserializer<'de>,
{
struct Vis;
impl<'de> Visitor<'de> for Vis {
type Value = u32;
fn expecting(&self, fmt: &mut Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(fmt, "a u32")
}
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
where
E: Error,
{
v.parse().map_err(|_| E::invalid_type(Unexpected::Str(v), &"a u32"))
}
}
de.deserialize_str(Vis)
}