1 use std
::borrow
::Borrow
;
6 use pbs_api_types
::HumanByte
;
8 pub fn strip_server_file_extension(name
: &str) -> &str {
9 if name
.ends_with(".didx") || name
.ends_with(".fidx") || name
.ends_with(".blob") {
12 name
// should not happen
16 pub fn render_backup_file_list
<S
: Borrow
<str>>(files
: &[S
]) -> String
{
17 let mut files
: Vec
<&str> = files
.iter()
18 .map(|v
| strip_server_file_extension(v
.borrow()))
26 pub fn render_epoch(value
: &Value
, _record
: &Value
) -> Result
<String
, Error
> {
27 if value
.is_null() { return Ok(String::new()); }
28 let text
= match value
.as_i64() {
30 if let Ok(epoch_string
) = proxmox_time
::strftime_local("%c", epoch
as i64) {
43 pub fn render_task_status(value
: &Value
, record
: &Value
) -> Result
<String
, Error
> {
44 if record
["endtime"].is_null() {
45 Ok(value
.as_str().unwrap_or("running").to_string())
47 Ok(value
.as_str().unwrap_or("unknown").to_string())
51 pub fn render_bool_with_default_true(value
: &Value
, _record
: &Value
) -> Result
<String
, Error
> {
52 let value
= value
.as_bool().unwrap_or(true);
53 Ok((if value { "1" }
else { "0" }
).to_string())
56 pub fn render_bytes_human_readable(value
: &Value
, _record
: &Value
) -> Result
<String
, Error
> {
57 if value
.is_null() { return Ok(String::new()); }
58 let text
= match value
.as_u64() {
60 HumanByte
::from(bytes
).to_string()