rust_to_npm/generators/
package.rs1use crate::Package;
2
3pub fn generate_package_json(package: &mut Package, source: &bool) -> String {
5 let keywords = package
6 .keywords
7 .clone()
8 .unwrap_or(Vec::new())
9 .iter()
10 .map(|word| format!(r#""{}""#, word))
11 .collect::<Vec<String>>()
12 .join(",");
13 let authors = package.authors.clone().unwrap_or(Vec::new());
14 let license = package.license.clone().unwrap_or("ISC".to_string());
15 let repository = package.repository.clone().unwrap_or("".to_string());
16 let homepage = package.homepage.clone().unwrap_or("".to_string());
17 let description = package.description.clone().unwrap_or("".to_string());
18
19 let authors = if authors.is_empty() {
20 "".to_string()
21 } else {
22 let first = authors.first().unwrap();
23 format!(r#""author": "{}","#, first)
24 };
25
26 let bugs = if repository.is_empty() {
27 "".to_string()
28 } else {
29 format!(
30 r#",
31 "bugs": {{
32 "url": "{}/issues"
33 }}"#,
34 repository
35 )
36 };
37
38 let repository = if repository.is_empty() {
39 "".to_string()
40 } else {
41 format!(
42 r#"
43 "repository": {{
44 "type": "git",
45 "url": "{}.git"
46 }},"#,
47 repository
48 )
49 };
50
51 let description = if description.is_empty() {
52 println!("Description is optional on the Cargo.toml, but nice to add to let others know what the package is about.");
53 "".to_string()
54 } else {
55 format!(r#""description": "{}","#, description)
56 };
57
58 let files = if source == &true {
59 ""
60 } else {
61 r#",
62 "files": [
63 "pre-install.js",
64 "start.js",
65 "uninstall.js",
66 "README.md",
67 "LICENSE"
68 ]"#
69 };
70
71 let homepage = if homepage.is_empty() {
72 "".to_string()
73 } else {
74 format!(
75 r#",
76 "homepage": "{}""#,
77 homepage
78 )
79 };
80
81 let license = if license.is_empty() {
82 "".to_string()
83 } else {
84 format!(
85 r#"
86 "license": "{}""#,
87 license
88 )
89 };
90
91 format!(
92 r#"{{
93 "name": "{}",
94 "version": "{}",
95 {}
96 "main": "start.js",
97 "directories": {{
98 "test": "tests"
99 }},
100 "scripts": {{
101 "test": "echo \"Error: no test specified\" && exit 1",
102 "postinstall": "node ./pre-install.js",
103 "uninstall": "node ./uninstall.js"
104 }},{}
105 "keywords": [{}],
106 {}{}{}{}{}
107}}
108 "#,
109 package.name,
110 package.version,
111 description,
112 repository,
113 keywords,
114 authors,
115 license,
116 bugs,
117 homepage,
118 files
119 )
120}