bobashare_web/views/
filters.rs1use askama::Result;
2use chrono::TimeDelta;
3use humansize::format_size;
4
5fn pluralize(input: &str, count: i64) -> String {
6 if count == 1 {
7 input.to_string()
8 } else {
9 input.to_string() + "s"
10 }
11}
12
13pub fn humanduration(duration: &TimeDelta) -> Result<String> {
15 let duration = *duration;
16 if duration < TimeDelta::try_minutes(1).unwrap() {
17 let seconds = duration.num_seconds();
18 return Ok(format!("{} {}", seconds, pluralize("second", seconds)));
19 }
20 if duration < TimeDelta::try_hours(1).unwrap() {
21 let minutes = duration.num_minutes();
22 return Ok(format!("{} {}", minutes, pluralize("minute", minutes)));
23 }
24 if duration < TimeDelta::try_days(1).unwrap() {
25 let hours = duration.num_hours();
26 return Ok(format!("{} {}", hours, pluralize("hour", hours)));
27 }
28 if duration < TimeDelta::try_days(30).unwrap() {
30 let days = duration.num_days();
31 return Ok(format!("{} {}", days, pluralize("day", days)));
32 }
33 let months = duration.num_days() / 30;
35 Ok(format!("{} {}", months, pluralize("month", months)))
36 }
38
39pub fn humansize(size: &u64) -> Result<String> {
40 Ok(format_size(*size, humansize::BINARY))
41}