leetcode_api/leetcode/resps/
pass_qs.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Clone)]
4#[derive(Debug)]
5#[derive(Default)]
6#[derive(PartialEq, Eq)]
7#[derive(Deserialize, Serialize)]
8pub struct Passdata {
9    #[serde(default)]
10    pub data: PassData,
11}
12
13#[derive(Clone)]
14#[derive(Debug)]
15#[derive(Default)]
16#[derive(PartialEq, Eq)]
17#[derive(Deserialize, Serialize)]
18pub struct DataCom {
19    #[serde(default, alias = "allQuestionsCount")]
20    all_questions_count: Vec<DifficultyPass>,
21    #[serde(default, alias = "matchedUser")]
22    matched_user: MatchedUser,
23}
24
25impl DataCom {
26    fn info(&self) -> Vec<String> {
27        let mut res = Vec::with_capacity(4);
28        if let Some(v) = &self.matched_user.submit_stats {
29            for i in &v.ac_submission_num {
30                res.push(format!("{}: {}", i.difficulty, i.count));
31            }
32        }
33        res
34    }
35}
36
37#[derive(Clone)]
38#[derive(Debug)]
39#[derive(Default)]
40#[derive(PartialEq, Eq)]
41#[derive(Deserialize, Serialize)]
42pub struct MatchedUser {
43    #[serde(default, alias = "submitStats")]
44    submit_stats: Option<SubmitStats>,
45}
46#[derive(Clone)]
47#[derive(Debug)]
48#[derive(Default)]
49#[derive(PartialEq, Eq)]
50#[derive(Deserialize, Serialize)]
51pub struct SubmitStats {
52    #[serde(default, alias = "acSubmissionNum")]
53    ac_submission_num: Vec<DifficultyPass>,
54    #[serde(default, alias = "totalSubmissionNum")]
55    total_submission_num: Vec<DifficultyPass>,
56}
57
58#[derive(Clone)]
59#[derive(Debug)]
60#[derive(PartialEq, Eq)]
61#[derive(Serialize, Deserialize)]
62#[serde(untagged)]
63pub enum PassData {
64    Cn(DataCn),
65    Com(DataCom),
66}
67
68impl PassData {
69    pub fn info(&self) -> Vec<String> {
70        match self {
71            Self::Cn(v) => v
72                .user_profile_user_question_progress
73                .info(),
74            Self::Com(v) => v.info(),
75        }
76    }
77}
78
79impl Default for PassData {
80    fn default() -> Self {
81        Self::Cn(DataCn::default())
82    }
83}
84
85#[derive(Clone)]
86#[derive(Debug)]
87#[derive(Default)]
88#[derive(PartialEq, Eq)]
89#[derive(Deserialize, Serialize)]
90pub struct DataCn {
91    #[serde(default, alias = "userProfileUserQuestionProgress")]
92    user_profile_user_question_progress: UserProfileUserQuestionProgress,
93    #[serde(default, alias = "userProfileUserQuestionSubmitStats")]
94    user_profile_user_question_submit_stats: UserProfileUserQuestionSubmitStats,
95}
96
97#[derive(Clone)]
98#[derive(Debug)]
99#[derive(Default)]
100#[derive(PartialEq, Eq)]
101#[derive(Deserialize, Serialize)]
102pub struct UserProfileUserQuestionSubmitStats {
103    #[serde(default, alias = "acSubmissionNum")]
104    ac_submission_num: Vec<DifficultyPass>,
105}
106
107#[derive(Clone)]
108#[derive(Debug)]
109#[derive(Default)]
110#[derive(PartialEq, Eq)]
111#[derive(Deserialize, Serialize)]
112pub struct UserProfileUserQuestionProgress {
113    #[serde(default, alias = "numAcceptedQuestions")]
114    num_accepted_questions: Vec<DifficultyPass>,
115    #[serde(default, alias = "numFailedQuestions")]
116    num_failed_questions: Vec<DifficultyPass>,
117    #[serde(default, alias = "numUntouchedQuestions")]
118    num_untouched_questions: Vec<DifficultyPass>,
119}
120
121impl UserProfileUserQuestionProgress {
122    fn info(&self) -> Vec<String> {
123        let mut res = Vec::with_capacity(4);
124        let mut all = 0;
125        for i in &self.num_accepted_questions {
126            res.push(format!("{}: {}", i.difficulty, i.count));
127            all += i.count;
128        }
129        res.push(format!("All: {}", all));
130        res
131    }
132}
133
134#[derive(Clone)]
135#[derive(Debug)]
136#[derive(Default)]
137#[derive(PartialEq, Eq)]
138#[derive(Deserialize, Serialize)]
139pub struct DifficultyPass {
140    difficulty: String,
141    count: u32,
142}