bobashare_web/views/
filters.rs1use ::humansize::format_size;
2use askama::Result;
3use chrono::TimeDelta;
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
13#[askama::filter_fn]
15pub fn humanduration(duration: &TimeDelta, _: &dyn askama::Values) -> Result<String> {
16 let duration = *duration;
17 if duration < TimeDelta::try_minutes(1).unwrap() {
18 let seconds = duration.num_seconds();
19 return Ok(format!("{} {}", seconds, pluralize("second", seconds)));
20 }
21 if duration < TimeDelta::try_hours(1).unwrap() {
22 let minutes = duration.num_minutes();
23 return Ok(format!("{} {}", minutes, pluralize("minute", minutes)));
24 }
25 if duration < TimeDelta::try_days(1).unwrap() {
26 let hours = duration.num_hours();
27 return Ok(format!("{} {}", hours, pluralize("hour", hours)));
28 }
29 if duration < TimeDelta::try_days(30).unwrap() {
31 let days = duration.num_days();
32 return Ok(format!("{} {}", days, pluralize("day", days)));
33 }
34 let months = duration.num_days() / 30;
36 Ok(format!("{} {}", months, pluralize("month", months)))
37 }
39
40#[askama::filter_fn]
41pub fn humansize(size: &u64, _: &dyn askama::Values) -> Result<String> {
42 Ok(format_size(*size, ::humansize::BINARY))
43}