fuchsia_inspect/writer/types/
bool_property.rs1use crate::writer::{Inner, InnerValueType, InspectType, Property};
6
7#[derive(Debug, PartialEq, Eq, Default)]
14pub struct BoolProperty {
15 inner: Inner<InnerValueType>,
16}
17
18impl Property<'_> for BoolProperty {
19 type Type = bool;
20
21 fn set(&self, value: bool) {
22 if let Some(ref inner_ref) = self.inner.inner_ref()
23 && let Ok(mut state) = inner_ref.state.try_lock()
24 {
25 state.set_bool(inner_ref.block_index, value);
26 }
27 }
28}
29
30impl InspectType for BoolProperty {
31 fn into_recorded(self) -> crate::writer::types::RecordedInspectType {
32 crate::writer::types::RecordedInspectType::BoolProperty(self)
33 }
34}
35
36crate::impl_inspect_type_internal!(BoolProperty);
37
38#[cfg(test)]
39mod tests {
40 use super::*;
41 use crate::writer::Node;
42 use crate::writer::testing_utils::{GetBlockExt, get_state};
43 use inspect_format::{BlockType, Bool};
44
45 #[fuchsia::test]
46 fn bool_property() {
47 let default = BoolProperty::default();
49 default.set(true);
50
51 let state = get_state(4096);
52 let root = Node::new_root(state);
53 let node = root.create_child("node");
54 {
55 let property = node.create_bool("property", true);
56 property.get_block::<_, Bool>(|block| {
57 assert_eq!(block.block_type(), Some(BlockType::BoolValue));
58 assert!(block.value());
59 });
60 node.get_block::<_, inspect_format::Node>(|block| {
61 assert_eq!(block.child_count(), 1);
62 });
63
64 property.set(false);
65 property.get_block::<_, Bool>(|block| {
66 assert!(!block.value());
67 });
68 }
69 node.get_block::<_, inspect_format::Node>(|block| {
70 assert_eq!(block.child_count(), 0);
71 });
72 }
73}