diff --git a/src/app/browser/window/tab/item/client/driver/gemini.rs b/src/app/browser/window/tab/item/client/driver/gemini.rs index dc08a176..47b0c003 100644 --- a/src/app/browser/window/tab/item/client/driver/gemini.rs +++ b/src/app/browser/window/tab/item/client/driver/gemini.rs @@ -1,5 +1,4 @@ use super::{Feature, Subject}; -use crate::tool::format_bytes; use ggemini::client::{ connection::response::{data::Text, meta::Status}, Client, Request, @@ -217,6 +216,7 @@ fn handle( Some(&cancellable), ) { Ok(file_output_stream) => { + use crate::tool::Format; // Asynchronously read [IOStream](https://docs.gtk.org/gio/class.IOStream.html) // to local [MemoryInputStream](https://docs.gtk.org/gio/class.MemoryInputStream.html) // show bytes count in loading widget, validate max size for incoming data @@ -237,7 +237,7 @@ fn handle( let action = action.clone(); move |_, total| action.update.activate(&format!( "Received {}...", - format_bytes(total) + total.bytes() )) }, // on complete @@ -248,7 +248,7 @@ fn handle( action.complete.activate(&format!( "Saved to {} ({} total)", file.parse_name(), - format_bytes(total) + total.bytes() )) } Err(e) => action.cancel.activate(&e.to_string()) diff --git a/src/tool.rs b/src/tool.rs index b1ec934b..76b59099 100644 --- a/src/tool.rs +++ b/src/tool.rs @@ -1,23 +1,26 @@ //! Some shared helpers collection -/// Format bytes to KB/MB/GB presentation -pub fn format_bytes(value: usize) -> String { - const KB: f32 = 1024.0; - const MB: f32 = KB * KB; - const GB: f32 = MB * KB; +pub trait Format { + /// Format bytes to KB/MB/GB presentation + fn bytes(&self) -> String; +} - let f = value as f32; +impl Format for usize { + fn bytes(&self) -> String { + const KB: f32 = 1024.0; + const MB: f32 = KB * KB; + const GB: f32 = MB * KB; - if f < KB { - format!( - "{value} {}", - plurify::ns(value, &["byte", "bytes", "bytes"]) - ) - } else if f < MB { - format!("{:.2} KB", f / KB) - } else if f < GB { - format!("{:.2} MB", f / MB) - } else { - format!("{:.2} GB", f / GB) + let f = *self as f32; + + if f < KB { + format!("{self} {}", plurify::ns(*self, &["byte", "bytes", "bytes"])) + } else if f < MB { + format!("{:.2} KB", f / KB) + } else if f < GB { + format!("{:.2} MB", f / MB) + } else { + format!("{:.2} GB", f / GB) + } } }