maven_search_lib/
format.rs1use 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}