prehnite_core/license_bundle/
mod.rs

1#![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
10/// デフォルトのライセンスバンドルを取得します。
11///
12/// `bundle_license`フラグが有効でない場合はこのライセンスバンドルの内容が使用されます。
13pub fn get_default_license_bundle() -> LicenseBundle {
14    font()
15}
16
17/// デフォルトのライセンスバンドルが依存する第三者ソフトウェアの名前一覧を取得する。
18pub 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)]
26/// 第三者ソフトウェアの詳細を表す構造体
27pub 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)]
38/// ライセンスを表す構造体
39pub struct License {
40    pub full_text: String,
41}
42
43impl Package {
44    /// 名称とライセンス情報で初期化します。
45    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    /// 著者を追加します。
54    pub fn author(mut self, author: impl Into<String>) -> Self {
55        self.authors.push(author.into());
56        self
57    }
58
59    /// ホームページを設定します。
60    pub fn homepage(mut self, url: impl Into<String>) -> Self {
61        self.homepage = Some(url.into());
62        self
63    }
64
65    /// リポジトリを設定します。
66    pub fn repository(mut self, url: impl Into<String>) -> Self {
67        self.repository = Some(url.into());
68        self
69    }
70
71    /// ライセンスの全文を追加します。
72    pub fn license_text(mut self, license: String) -> Self {
73        self.licenses.push(License { full_text: license });
74        self
75    }
76
77    /// ライセンスの全文をすべて削除し、新しいライセンスの全文で上書きします。
78    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    /// 依存関係を追加します。
85    pub fn dependencies(mut self, dependencies: Vec<String>) -> Self {
86        self.dependencies.extend(dependencies);
87        self
88    }
89
90    /// Prehniteのメンバのライセンスを設定します。
91    pub fn prehnite_member_license(self) -> Self {
92        self.override_license_text(include_str!("../../../LICENSE").to_string())
93    }
94
95    /// Prehniteのライセンスを取得します。
96    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}