• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tamada / totebag / 9073633753

14 May 2024 04:12AM UTC coverage: 75.855% (-3.8%) from 79.637%
9073633753

push

github

web-flow
Merge pull request #19 from tamada/release/v0.3.0

Release/v0.3.0

208 of 343 new or added lines in 12 files covered. (60.64%)

9 existing lines in 3 files now uncovered.

754 of 994 relevant lines covered (75.86%)

4.19 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

74.58
/src/format.rs
1
use std::ffi::OsStr;
2
use std::fmt::Display;
3
use crate::cli::{ToteError, Result};
4

5
pub fn find_format(file_name: Option<&OsStr>) -> Result<Format> {
19✔
6
    match file_name {
19✔
7
        Some(file_name) => {
18✔
8
            let name = file_name.to_str().unwrap().to_lowercase();
18✔
9
            if name.ends_with(".tar.gz") || name.ends_with(".tgz") {
18✔
10
                return Ok(Format::TarGz);
3✔
11
            } else if name.ends_with(".tar.bz2") || name.ends_with(".tbz2") {
15✔
12
                return Ok(Format::TarBz2);
3✔
13
            } else if name.ends_with(".tar.xz") || name.ends_with(".txz") {
12✔
14
                return Ok(Format::TarXz);
1✔
15
            } else if name.ends_with(".7z") {
11✔
16
                return Ok(Format::SevenZ);
1✔
17
            } else if name.ends_with(".tar") {
10✔
18
                return Ok(Format::Tar);
3✔
19
            } else if name.ends_with(".rar") {
7✔
20
                return Ok(Format::Rar);
3✔
21
            } else if name.ends_with(".zip") || name.ends_with(".jar") || name.ends_with(".war") || name.ends_with(".ear") {
4✔
22
                return Ok(Format::Zip);
3✔
23
            } else {
24
                return Ok(Format::Unknown(file_name.to_str().unwrap().to_string()));
1✔
25
            }
26
        }
27
        None => Err(ToteError::NoArgumentsGiven),
1✔
28
    }
29
}
19✔
30

31

32
#[derive(Debug, PartialEq)]
33
pub enum Format {
34
    Zip,
35
    Tar,
36
    TarGz,
37
    TarBz2,
38
    TarXz,
39
    SevenZ,
40
    Rar,
41
    Unknown(String),
42
}
43

44
impl Display for Format {
45
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1✔
46
        match self {
1✔
NEW
47
            Format::Zip => write!(f, "Zip"),
×
NEW
48
            Format::Tar => write!(f, "Tar"),
×
NEW
49
            Format::TarGz => write!(f, "TarGz"),
×
NEW
50
            Format::TarBz2 => write!(f, "TarBz2"),
×
NEW
51
            Format::TarXz => write!(f, "TarXz"),
×
NEW
52
            Format::SevenZ => write!(f, "SevenZ"),
×
NEW
53
            Format::Rar => write!(f, "Rar"),
×
54
            Format::Unknown(s) => write!(f, "{}: unknown format", s),
1✔
55
        }
56
    }
1✔
57
}
58

59
#[cfg(test)]
60
mod tests {
61
    use super::*;
62

63
    #[test]
64
    fn test_format() {
1✔
65
        assert!(find_format(None).is_err());
1✔
66
        if let Ok(f) = find_format(Some(OsStr::new("hoge.zip"))) {
1✔
67
            assert_eq!(f, Format::Zip);
1✔
68
        }
×
69
        if let Ok(f) = find_format(Some(OsStr::new("hoge.unknown"))) {
1✔
70
            assert_eq!(f.to_string(), "hoge.unknown: unknown format".to_string());
1✔
71
        }
×
72
        if let Ok(f) = find_format(Some(OsStr::new("hoge.tar"))) {
1✔
73
            assert_eq!(f, Format::Tar);
1✔
74
        }
×
75
        if let Ok(f) = find_format(Some(OsStr::new("hoge.rar"))) {
1✔
76
            assert_eq!(f, Format::Rar);
1✔
77
        }
×
78
        if let Ok(f) = find_format(Some(OsStr::new("hoge.tar.gz"))) {
1✔
79
            assert_eq!(f, Format::TarGz);
1✔
80
        }
×
81
        if let Ok(f) = find_format(Some(OsStr::new("hoge.tar.bz2"))) {
1✔
82
            assert_eq!(f, Format::TarBz2);
1✔
83
        }
×
84
        if let Ok(f) = find_format(Some(OsStr::new("hoge.tar.xz"))) {
1✔
85
            assert_eq!(f, Format::TarXz);
1✔
NEW
86
        }
×
87
        if let Ok(f) = find_format(Some(OsStr::new("hoge.7z"))) {
1✔
88
            assert_eq!(f, Format::SevenZ);
1✔
NEW
89
        }
×
90
    }
1✔
91
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc