1use crate::types::{Doc, HttpResponse, MavenResult};
2
3const URL: &str = "https://central.sonatype.com/api/internal/browse/components";
4
5pub fn search<'a>(query: &str) -> MavenResult<'a, Vec<Doc>> {
6 let request_body = format!(r#"{{"filter":[], "size": 10, "searchTerm": "{query}"}}"#);
7 debug!("Going to make a request for : {request_body}");
8
9 let resp: HttpResponse = ureq::post(URL)
10 .header("Content-Type", "application/json")
11 .send(request_body)?
12 .body_mut()
13 .read_json()?;
14
15 debug!("response:\n{resp:#?}");
16 Ok(resp.components)
17}
18
19#[cfg(test)]
20mod tests {
21 use crate::http::search;
22
23 #[test]
24 fn test_search() {
25 env_logger::init();
26
27 let docs = search("g:org.apache.wicket a:wicket-core").unwrap();
28 assert_eq!(docs.len(), 1);
29 let doc = &docs[0];
30 assert_eq!(doc.id, "pkg:maven/org.apache.wicket/wicket-core");
31 assert_eq!(doc.namespace, "org.apache.wicket");
32 assert_eq!(doc.name, "wicket-core");
33 assert!(!doc.latestVersionInfo.version.is_empty());
34 }
35}