1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3use strum::IntoEnumIterator;
4use strum_macros::EnumIter;
5
6#[derive(Deserialize, Serialize, Debug)]
8pub struct UserSearch(pub HashMap<String, Option<User>>);
9
10#[derive(Deserialize, Serialize, Debug)]
11pub struct User {
12 pub id: String,
13 pub username: String,
14 pub lengthvotes: Option<u32>,
16 pub lengthvotes_sum: Option<u32>,
18}
19
20pub struct UserSearchFields(pub Vec<UserDataField>);
22
23#[derive(Serialize, EnumIter)]
24#[serde(rename_all = "snake_case")]
25pub enum UserDataField {
26 Lengthvotes,
28 LengthvotesSum,
30}
31
32impl UserSearchFields {
33 pub fn new() -> Self {
35 UserSearchFields(vec![])
36 }
37
38 pub fn from(vec: Vec<UserDataField>) -> Self {
40 UserSearchFields(vec)
41 }
42
43 pub fn all() -> Self {
45 let mut vec = Vec::with_capacity(UserDataField::iter().len());
46 for variant in UserDataField::iter() {
47 vec.push(variant);
48 }
49 UserSearchFields(vec)
50 }
51
52 pub fn to_csv(&self) -> String {
54 self.0
55 .iter()
56 .map(|field| serde_json::to_string(&field).unwrap().replace("\"", ""))
57 .collect::<Vec<String>>()
58 .join(",")
59 }
60}