prehnite_core/license_bundle/
mod.rs1#![doc = "ライセンスバンドル"]
2mod font;
3
4use crate::license_bundle::font::font;
5use serde::{Deserialize, Serialize};
6use std::collections::BTreeSet;
7
8pub type LicenseBundle = Vec<Package>;
9
10pub fn get_default_license_bundle() -> LicenseBundle {
14 font()
15}
16
17pub fn get_names_from_default_license_bundle() -> Vec<String> {
19 get_default_license_bundle()
20 .into_iter()
21 .map(|v| v.name)
22 .collect()
23}
24
25#[derive(Default, Debug, Clone, Serialize, Deserialize)]
26pub struct Package {
28 pub name: String,
29 pub authors: Vec<String>,
30 pub homepage: Option<String>,
31 pub repository: Option<String>,
32 pub license_info: String,
33 pub licenses: Vec<License>,
34 pub dependencies: BTreeSet<String>,
35}
36
37#[derive(Default, Debug, Clone, Serialize, Deserialize)]
38pub struct License {
40 pub full_text: String,
41}
42
43impl Package {
44 pub fn new(name: impl Into<String>, license_info: impl Into<String>) -> Self {
46 Self {
47 name: name.into(),
48 license_info: license_info.into(),
49 ..Default::default()
50 }
51 }
52
53 pub fn author(mut self, author: impl Into<String>) -> Self {
55 self.authors.push(author.into());
56 self
57 }
58
59 pub fn homepage(mut self, url: impl Into<String>) -> Self {
61 self.homepage = Some(url.into());
62 self
63 }
64
65 pub fn repository(mut self, url: impl Into<String>) -> Self {
67 self.repository = Some(url.into());
68 self
69 }
70
71 pub fn license_text(mut self, license: String) -> Self {
73 self.licenses.push(License { full_text: license });
74 self
75 }
76
77 pub fn override_license_text(mut self, license: String) -> Self {
79 self.licenses.clear();
80 self.licenses.push(License { full_text: license });
81 self
82 }
83
84 pub fn dependencies(mut self, dependencies: Vec<String>) -> Self {
86 self.dependencies.extend(dependencies);
87 self
88 }
89
90 pub fn prehnite_member_license(self) -> Self {
92 self.override_license_text(include_str!("../../../LICENSE").to_string())
93 }
94
95 pub fn prehnite() -> Self {
97 Package::new("prehnite", "Zlib")
98 .author("saku shirakura<saku@sakushira.com>")
99 .homepage("https://prehnite.jp")
100 .dependencies(get_names_from_default_license_bundle())
101 .prehnite_member_license()
102 }
103}