deb_rs/shared/
package_with_version.rs

1use super::VersionBinding;
2
3#[derive(Debug, Clone, PartialEq, Eq)]
4pub struct PackageWithVersion {
5    pub name: String,
6    pub version: String,
7    pub binding: VersionBinding,
8}
9
10impl PackageWithVersion {
11    pub fn from_str(contents: &str) -> Self {
12        let split: Vec<&str> = contents.split(')').collect::<Vec<&str>>()[0]
13            .split(" (")
14            .collect();
15
16        if split.len() == 2 {
17            let name = split[0].to_string();
18            let mut version = split[1].to_string();
19            let mut version_binding = String::new();
20            loop {
21                let first = version.chars().next().unwrap();
22
23                if !(first == '=' || first == '>' || first == '<' || first == ' ') {
24                    break;
25                } else {
26                    version_binding.push(first);
27                    version.remove(0);
28                }
29            }
30
31            PackageWithVersion {
32                name,
33                version,
34                binding: VersionBinding::from_str(&version_binding),
35            }
36        } else {
37            let name = split[0].to_string();
38
39            PackageWithVersion {
40                name,
41                version: String::new(),
42                binding: VersionBinding::Any,
43            }
44        }
45    }
46}