maven-search 0.7.0

A library for searching in Maven Central and formatting to Maven/Gradle/Gradle.kts/Sbt/Ivy/Lein
Documentation
use crate::types::{Doc, HttpResponse, MavenResult};
use log::debug;

const URL: &str = "https://central.sonatype.com/api/internal/browse/components";

pub fn search<'a>(query: &str) -> MavenResult<'a, Vec<Doc>> {
    let request_body = format!(r#"{{"filter":[], "size": 10, "searchTerm": "{query}"}}"#);
    debug!("Going to make a request for : {request_body}");

    let resp: HttpResponse = ureq::post(URL)
        .header("Content-Type", "application/json")
        .send(request_body)?
        .body_mut()
        .read_json()?;

    debug!("response:\n{resp:#?}");
    Ok(resp.components)
}

#[cfg(test)]
mod tests {
    use crate::http::search;

    #[test]
    fn test_search() {
        env_logger::init();

        let docs = search("g:org.apache.wicket a:wicket-core").unwrap();
        assert_eq!(docs.len(), 1);
        let doc = &docs[0];
        assert_eq!(doc.id, "pkg:maven/org.apache.wicket/wicket-core");
        assert_eq!(doc.namespace, "org.apache.wicket");
        assert_eq!(doc.name, "wicket-core");
        assert!(!doc.latestVersionInfo.version.is_empty());
    }
}