rattler_conda_types/package/
files.rs

1use crate::package::PackageFile;
2use std::path::{Path, PathBuf};
3
4/// Representation of the `info/files` file in older package archives.
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct Files {
7    /// A list of files in the package.
8    pub files: Vec<PathBuf>,
9}
10
11impl PackageFile for Files {
12    fn package_path() -> &'static Path {
13        Path::new("info/files")
14    }
15
16    fn from_str(str: &str) -> Result<Self, std::io::Error> {
17        Ok(Self {
18            files: str.lines().map(PathBuf::from).collect(),
19        })
20    }
21}
22
23#[cfg(test)]
24mod test {
25    use super::{Files, PackageFile};
26    use std::path::PathBuf;
27
28    #[test]
29    pub fn test_parse_files() {
30        let parsed = Files::from_str("include/zconf.h\ninclude/zlib.h\nlib/libz.a\nlib/libz.so\nlib/libz.so.1\nlib/libz.so.1.2.8\nlib/pkgconfig/zlib.pc").unwrap();
31        assert_eq!(
32            parsed,
33            Files {
34                files: vec![
35                    PathBuf::from("include/zconf.h"),
36                    PathBuf::from("include/zlib.h"),
37                    PathBuf::from("lib/libz.a"),
38                    PathBuf::from("lib/libz.so"),
39                    PathBuf::from("lib/libz.so.1"),
40                    PathBuf::from("lib/libz.so.1.2.8"),
41                    PathBuf::from("lib/pkgconfig/zlib.pc"),
42                ]
43            }
44        );
45    }
46}