cargo_generate_license/
lib.rs

1use std::fs::File;
2use std::io;
3use std::io::Write;
4
5pub mod license;
6
7pub fn write_license(license_text: &str, output_path: &str) -> Result<(), io::Error> {
8    let mut file = File::create(output_path)?;
9    file.write_all(license_text.as_bytes())?;
10    Ok(())
11}
12
13pub fn create_license(license_type: &str) -> Option<Box<dyn license::License>> {
14    match license_type.to_uppercase().as_ref() {
15        // BSD
16        "BSD" => Some(Box::new(license::BSD)),
17        // MIT
18        "MIT" => Some(Box::new(license::Mit)),
19        // GPL
20        "GPL" => Some(Box::new(license::GPL)),
21        "GPL-3" => Some(Box::new(license::GPL)),
22        // AGPL
23        "AGPL" => Some(Box::new(license::AGPL)),
24        "AGPL-3" => Some(Box::new(license::AGPL)),
25        // Apache
26        "APACHE" => Some(Box::new(license::Apache)),
27        "CC-BY" => Some(Box::new(license::CcBy)),
28        "CCBY" => Some(Box::new(license::CcBy)),
29        // CC_BY_NC
30        "CC-BY-NC" => Some(Box::new(license::CcByNc)),
31        "CCBYNC" => Some(Box::new(license::CcByNc)),
32        // CC_BY_SA
33        "CC-BY-SA" => Some(Box::new(license::CcBySa)),
34        "CCBYSA" => Some(Box::new(license::CcBySa)),
35        // CC_BY_NC_SA
36        "CC-BY-NC-SA" => Some(Box::new(license::CcByNcSa)),
37        "CCBYNCSA" => Some(Box::new(license::CcByNcSa)),
38        // CC0
39        "CC0" => Some(Box::new(license::CCZero)),
40        // LGPL
41        "LGPL" => Some(Box::new(license::LGPL)),
42        "LGPL-3" => Some(Box::new(license::LGPL)),
43        // MPL
44        "MPL" => Some(Box::new(license::MPL)),
45        // Unlicense
46        "UNLICENSE" => Some(Box::new(license::UNLICENSE)),
47        _ => None,
48    }
49}
50
51#[cfg(test)]
52mod test {
53    use super::*;
54
55    #[test]
56    fn not_found_license() {
57        let license = create_license("_NO_LICENSE_");
58        assert!(license.is_none());
59    }
60
61    #[test]
62    fn create_mit_license() {
63        let mit = create_license("mit");
64        let license_text = mit.unwrap().notice(2018, "TEST_USER", "license-generator");
65        assert!(license_text.contains("Permission is hereby granted"));
66        assert!(license_text.contains("TEST_USER"));
67        assert!(license_text.contains("2018"));
68    }
69
70    #[test]
71    fn create_gpl_license() {
72        let gpl = create_license("gpl");
73        let license_text = gpl.unwrap().notice(2018, "TEST_USER", "license-generator");
74        assert!(license_text.contains("GNU GENERAL PUBLIC LICENSE"));
75        assert!(license_text.contains("TEST_USER"));
76        assert!(license_text.contains("2018"));
77        assert!(license_text.contains("license-generator"));
78    }
79
80    #[test]
81    fn create_ccby_license() {
82        let ccby = create_license("ccby");
83        let license_text = ccby.unwrap().notice(2018, "TEST_USER", "license-generator");
84        assert!(license_text.contains("Attribution 4.0 International"));
85        assert!(license_text.contains("TEST_USER"));
86        assert!(license_text.contains("license-generator"));
87    }
88}