asimov_module/models/
manifest.rs

1// This is free and unencumbered software released into the public domain.
2
3use alloc::{string::String, vec::Vec};
4
5#[derive(Clone, Debug, Default)]
6#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
7pub struct ModuleManifest {
8    pub name: String,
9    pub label: String,
10    pub summary: String,
11    pub links: Vec<String>,
12    #[cfg_attr(
13        feature = "serde",
14        serde(default, skip_serializing_if = "Provides::is_empty")
15    )]
16    pub provides: Provides,
17    #[cfg_attr(
18        feature = "serde",
19        serde(default, skip_serializing_if = "Handles::is_empty")
20    )]
21    pub handles: Handles,
22}
23
24#[derive(Clone, Debug, Default)]
25#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
26pub struct Provides {
27    pub programs: Vec<String>,
28}
29
30impl Provides {
31    pub fn is_empty(&self) -> bool {
32        self.programs.is_empty()
33    }
34}
35
36#[derive(Clone, Debug, Default)]
37#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
38pub struct Handles {
39    #[cfg_attr(
40        feature = "serde",
41        serde(default, skip_serializing_if = "Vec::is_empty")
42    )]
43    pub url_protocols: Vec<String>,
44    #[cfg_attr(
45        feature = "serde",
46        serde(default, skip_serializing_if = "Vec::is_empty")
47    )]
48    pub url_prefixes: Vec<String>,
49    #[cfg_attr(
50        feature = "serde",
51        serde(default, skip_serializing_if = "Vec::is_empty")
52    )]
53    pub url_patterns: Vec<String>,
54    #[cfg_attr(
55        feature = "serde",
56        serde(default, skip_serializing_if = "Vec::is_empty")
57    )]
58    pub file_extensions: Vec<String>,
59    #[cfg_attr(
60        feature = "serde",
61        serde(default, skip_serializing_if = "Vec::is_empty")
62    )]
63    pub content_types: Vec<String>,
64}
65
66impl Handles {
67    pub fn is_empty(&self) -> bool {
68        self.url_protocols.is_empty()
69            && self.url_prefixes.is_empty()
70            && self.url_patterns.is_empty()
71            && self.file_extensions.is_empty()
72            && self.content_types.is_empty()
73    }
74}