libcnb_data/
layer_content_metadata.rs1use crate::generic::GenericMetadata;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Deserialize, Serialize)]
8#[serde(deny_unknown_fields)]
9pub struct LayerContentMetadata<M = GenericMetadata> {
10 pub types: Option<LayerTypes>,
11
12 pub metadata: M,
14}
15
16impl<M: PartialEq> PartialEq for LayerContentMetadata<M> {
17 fn eq(&self, other: &Self) -> bool {
18 self.types == other.types && self.metadata == other.metadata
19 }
20}
21
22#[derive(Debug, Default, Deserialize, Serialize, Eq, PartialEq, Copy, Clone)]
25#[serde(deny_unknown_fields)]
26pub struct LayerTypes {
27 #[serde(default)]
29 pub launch: bool,
30
31 #[serde(default)]
33 pub build: bool,
34
35 #[serde(default)]
37 pub cache: bool,
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn deserialize_everything() {
46 let toml_str = r#"
47 [types]
48 launch = true
49 build = true
50 cache = false
51
52 [metadata]
53 version = "1.2.3"
54 "#;
55 let layer = toml::from_str::<LayerContentMetadata>(toml_str).unwrap();
56 assert_eq!(
57 layer.types,
58 Some(LayerTypes {
59 launch: true,
60 build: true,
61 cache: false
62 })
63 );
64 assert_eq!(
65 layer.metadata.unwrap().get("version"),
66 Some(&toml::value::Value::try_from("1.2.3").unwrap())
67 );
68 }
69
70 #[test]
71 fn deserialize_empty() {
72 let layer = toml::from_str::<LayerContentMetadata>("").unwrap();
73 assert_eq!(layer.types, None);
74 assert_eq!(layer.metadata, None);
75 }
76
77 #[test]
78 fn types_table_with_no_entries_has_defaults() {
79 let toml_str = r"
80 [types]
81 ";
82 let layer = toml::from_str::<LayerContentMetadata>(toml_str).unwrap();
83 assert_eq!(
84 layer.types,
85 Some(LayerTypes {
86 launch: false,
87 build: false,
88 cache: false
89 })
90 );
91 assert_eq!(layer.metadata, None);
92 }
93}