1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use crate::{registry::Registry, result::Result};
use std::cmp::Ordering;
const MAX_PACKAGE_NAME_LEN: usize = 50;
fn cap(mut name: String) -> String {
name.push_str(&" ".repeat(MAX_PACKAGE_NAME_LEN - name.len()));
name
}
pub fn exec(query: String, version: bool) -> Result<()> {
let registry = Registry::new()?;
let mut source = registry.source()?;
source.sort_by(|(np, _), (nq, _)| np.partial_cmp(nq).unwrap_or(Ordering::Greater));
println!(
"{}",
if query.is_empty() {
source
.iter()
.map(|(name, ver)| {
if version {
name.to_string()
} else {
format!("{} - {}", cap(name.to_string()), ver)
}
})
.collect::<Vec<String>>()
} else {
source
.iter()
.filter(|(name, _)| name.contains(&query))
.map(|(name, ver)| {
if version {
name.to_string()
} else {
format!("{} - {}", cap(name.to_string()), ver)
}
})
.collect::<Vec<String>>()
}
.join("\n")
);
Ok(())
}