maven_search_lib/
format.rs

1use crate::types::Doc;
2
3pub fn format(results: Vec<Doc>, output_format: &str) -> Vec<String> {
4    debug!(
5        "Going to format the following results with format '{:?}':\n{:?}",
6        output_format, &results
7    );
8
9    match output_format {
10        "gradle" => gradle(results),
11        "gradle.kts" | "gradle_kts" | "gradlekts" => gradle_kts(results),
12        "sbt" => sbt(results),
13        "lein" => lein(results),
14        "ivy" => ivy(results),
15        "maven" | "mvn" => maven(results),
16        unknown => {
17            warn!("Unknown format: '{unknown}'. Will print in Maven XML format");
18            maven(results)
19        }
20    }
21}
22
23fn version(doc: &Doc) -> &str {
24    match &doc.version {
25        Some(v) => v.as_str(),
26        None => doc.latestVersionInfo.version.as_str(),
27    }
28}
29
30fn transform<F>(results: Vec<Doc>, func: F) -> Vec<String>
31where
32    F: Fn(&Doc) -> String,
33{
34    results.iter().map(func).collect()
35}
36
37fn maven(results: Vec<Doc>) -> Vec<String> {
38    transform(results, |doc| {
39        format!(
40            r#"
41    <dependency>
42      <groupId>{}</groupId>
43      <artifactId>{}</artifactId>
44      <version>{}</version>
45    </dependency>
46    "#,
47            doc.namespace,
48            doc.name,
49            version(doc)
50        )
51    })
52}
53
54fn gradle(results: Vec<Doc>) -> Vec<String> {
55    transform(results, |doc| {
56        format!(
57            r#"
58    implementation '{}:{}:{}'
59    "#,
60            doc.namespace,
61            doc.name,
62            version(doc)
63        )
64    })
65}
66
67fn gradle_kts(results: Vec<Doc>) -> Vec<String> {
68    transform(results, |doc| {
69        format!(
70            r#"
71    implementation("{}:{}:{}")
72    "#,
73            doc.namespace,
74            doc.name,
75            version(doc)
76        )
77    })
78}
79
80fn sbt(results: Vec<Doc>) -> Vec<String> {
81    transform(results, |doc| {
82        format!(
83            r#"
84    libraryDependencies += "{}" % "{}" % "{}"
85    "#,
86            doc.namespace,
87            doc.name,
88            version(doc)
89        )
90    })
91}
92
93fn lein(results: Vec<Doc>) -> Vec<String> {
94    transform(results, |doc| {
95        format!(
96            r#"
97    [{}/{} "{}"]
98    "#,
99            doc.namespace,
100            doc.name,
101            version(doc)
102        )
103    })
104}
105
106fn ivy(results: Vec<Doc>) -> Vec<String> {
107    transform(results, |doc| {
108        format!(
109            r#"
110    <dependency org="{}" name="{}" rev="{}" />
111    "#,
112            doc.namespace,
113            doc.name,
114            version(doc)
115        )
116    })
117}