rust_to_npm/generators/
package.rs

1use crate::Package;
2
3/// create the package json matching specs for repo
4pub 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}