leetcode_api/render/
submit_list.rs

1use std::{fmt::Display, mem};
2
3use lcode_config::global::G_USER_CONFIG;
4use tabled::{
5    builder::Builder,
6    settings::{style::Style, themes::ColumnNames},
7};
8
9use crate::leetcode::resps::submit_list::{Submission, SubmissionList};
10
11impl Display for SubmissionList {
12    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13        if self.submissions.is_empty() {
14            return "No information".fmt(f);
15        }
16
17        let mut subs = vec![];
18        let mut temp = Vec::with_capacity(
19            G_USER_CONFIG
20                .config
21                .column
22                .min(self.submissions.len()),
23        );
24
25        subs.push(mem::take(&mut temp));
26
27        for submission in &self.submissions {
28            temp.push(submission.to_string());
29            if temp.len() >= G_USER_CONFIG.config.column {
30                subs.push(mem::take(&mut temp));
31            }
32        }
33        if !temp.is_empty() {
34            subs.push(temp);
35        }
36
37        let mut table = Builder::from(subs).build();
38        table
39            .with(Style::modern())
40            .with(ColumnNames::default());
41
42        format!("{}", table).fmt(f)
43    }
44}
45
46impl Display for Submission {
47    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
48        format!(
49            "• Title: {title} \n• ID: {id} \n• Lang: {lang} \n• Status: {status} \n• Runtime: \
50             {tim} \n• Memory: {mem} \n• Comment: {cmt} \n",
51            cmt = self
52                .submission_comment
53                .as_deref()
54                .unwrap_or_default(),
55            id = self.id,
56            title = self.title,
57            lang = self.lang_name,
58            status = self
59                .status_display
60                .as_deref()
61                .unwrap_or_default(),
62            tim = self.runtime,
63            mem = self.memory,
64        )
65        .fmt(f)
66    }
67}