maven_search_lib/
http.rs

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}