use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use strum::IntoEnumIterator;
use strum_macros::EnumIter;
#[derive(Deserialize, Serialize, Debug)]
pub struct UserSearch(pub HashMap<String, Option<User>>);
#[derive(Deserialize, Serialize, Debug)]
pub struct User {
pub id: String,
pub username: String,
pub lengthvotes: Option<u32>,
pub lengthvotes_sum: Option<u32>,
}
pub struct UserSearchFields(pub Vec<UserDataField>);
#[derive(Serialize, EnumIter)]
#[serde(rename_all = "snake_case")]
pub enum UserDataField {
Lengthvotes,
LengthvotesSum,
}
impl UserSearchFields {
pub fn new() -> Self {
UserSearchFields(vec![])
}
pub fn from(vec: Vec<UserDataField>) -> Self {
UserSearchFields(vec)
}
pub fn all() -> Self {
let mut vec = Vec::with_capacity(UserDataField::iter().len());
for variant in UserDataField::iter() {
vec.push(variant);
}
UserSearchFields(vec)
}
pub fn to_csv(&self) -> String {
self.0
.iter()
.map(|field| serde_json::to_string(&field).unwrap().replace("\"", ""))
.collect::<Vec<String>>()
.join(",")
}
}