cargo_generate_license/
lib.rs1use 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" => Some(Box::new(license::BSD)),
17 "MIT" => Some(Box::new(license::Mit)),
19 "GPL" => Some(Box::new(license::GPL)),
21 "GPL-3" => Some(Box::new(license::GPL)),
22 "AGPL" => Some(Box::new(license::AGPL)),
24 "AGPL-3" => Some(Box::new(license::AGPL)),
25 "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" => Some(Box::new(license::CcByNc)),
31 "CCBYNC" => Some(Box::new(license::CcByNc)),
32 "CC-BY-SA" => Some(Box::new(license::CcBySa)),
34 "CCBYSA" => Some(Box::new(license::CcBySa)),
35 "CC-BY-NC-SA" => Some(Box::new(license::CcByNcSa)),
37 "CCBYNCSA" => Some(Box::new(license::CcByNcSa)),
38 "CC0" => Some(Box::new(license::CCZero)),
40 "LGPL" => Some(Box::new(license::LGPL)),
42 "LGPL-3" => Some(Box::new(license::LGPL)),
43 "MPL" => Some(Box::new(license::MPL)),
45 "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}