1use crate::error::LogError;
2
3#[derive(Clone, Copy)]
4pub enum LogSize {
5 B(usize),
6 KB(usize),
7 MB(usize),
8 GB(usize),
9 TB(usize),
10 EB(usize),
11}
12
13impl LogSize {
14 pub fn len(&self) -> usize {
15 match self {
16 Self::B(b) => *b,
17 Self::KB(kb) => kb * 1024,
18 Self::MB(mb) => mb * 1024 * 1024,
19 Self::GB(gb) => gb * 1024 * 1024 * 1024,
20 Self::TB(tb) => tb * 1024 * 1024 * 1024 * 1024,
21 Self::EB(eb) => eb * 1024 * 1024 * 1024 * 1024 * 1024,
22 }
23 }
24
25 pub fn get_len(&self) -> usize {
26 self.len()
27 }
28
29 pub fn parse(value: &str) -> Result<Self, LogError> {
30 if value.ends_with("EB") {
31 Ok(Self::EB(
32 value.trim_end_matches("EB").parse().unwrap_or_default(),
33 ))
34 } else if value.ends_with("TB") {
35 Ok(Self::TB(
36 value.trim_end_matches("TB").parse().unwrap_or_default(),
37 ))
38 } else if value.ends_with("GB") {
39 Ok(Self::GB(
40 value.trim_end_matches("GB").parse().unwrap_or_default(),
41 ))
42 } else if value.ends_with("MB") {
43 Ok(Self::MB(
44 value.trim_end_matches("MB").parse().unwrap_or_default(),
45 ))
46 } else if value.ends_with("KB") {
47 Ok(Self::KB(
48 value.trim_end_matches("KB").parse().unwrap_or_default(),
49 ))
50 } else if value.ends_with("B") {
51 Ok(Self::B(
52 value.trim_end_matches("B").parse().unwrap_or_default(),
53 ))
54 } else {
55 Err(LogError::from("unknow LogSize"))
56 }
57 }
58}