leetcode_api/render/
submit_list.rs1use 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}