forked from Morganamilo/paru
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmock.rs
117 lines (102 loc) · 3.26 KB
/
mock.rs
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
use std::collections::HashMap;
use std::env::var;
use std::path::Path;
use std::result::Result as StdResult;
use anyhow::Result;
use async_trait::async_trait;
use raur::{Error, Package, Raur, SearchBy};
use srcinfo::Srcinfo;
#[derive(Debug, Default, Clone)]
pub struct Mock {
pkgs: HashMap<String, Package>,
}
impl Mock {
pub fn new() -> Result<Self> {
let mut mock = Mock {
pkgs: HashMap::new(),
};
let clone = Path::new(&var("CARGO_MANIFEST_DIR").unwrap()).join("testdata/clone");
for dir in std::fs::read_dir(clone)? {
let dir = dir?;
let srcinfo = Srcinfo::parse_file(dir.path().join(".SRCINFO"))?;
let base = srcinfo.base;
for pkg in srcinfo.pkgs {
let name = pkg.pkgname;
let depends = pkg
.depends
.into_iter()
.find(|v| v.arch.is_none())
.map(|v| v.vec)
.unwrap_or_default();
let make_depends = base
.makedepends
.iter()
.find(|v| v.arch.is_none())
.map(|v| v.vec.clone())
.unwrap_or_default();
let check_depends = base
.checkdepends
.iter()
.find(|v| v.arch.is_none())
.map(|v| v.vec.clone())
.unwrap_or_default();
let pkg = Package {
id: 0,
name: name.clone(),
package_base_id: 0,
package_base: base.pkgbase.clone(),
version: format!("{}-{}", base.pkgver, base.pkgrel),
description: None,
url: None,
num_votes: 0,
popularity: 0.0,
out_of_date: None,
maintainer: None,
first_submitted: 0,
last_modified: 0,
url_path: "".into(),
groups: vec![],
depends,
make_depends,
opt_depends: vec![],
check_depends,
conflicts: vec![],
replaces: vec![],
provides: vec![],
license: vec![],
keywords: vec![],
co_maintainers: vec![],
submitter: None,
};
mock.pkgs.insert(name, pkg);
}
}
Ok(mock)
}
pub fn client(&self) -> reqwest::Client {
reqwest::Client::new()
}
}
#[async_trait]
impl Raur for Mock {
type Err = raur::Error;
async fn raw_info<S: AsRef<str> + Send + Sync>(
&self,
pkgs: &[S],
) -> StdResult<Vec<Package>, Error> {
let mut ret = Vec::new();
for pkg in pkgs {
if let Some(pkg) = self.pkgs.get(pkg.as_ref()) {
ret.push(pkg.clone());
}
}
Ok(ret)
}
async fn search_by<S: AsRef<str> + Send + Sync>(
&self,
_pkg: S,
_by: SearchBy,
) -> StdResult<Vec<Package>, Error> {
unimplemented!()
}
}