fuchsia_inspect/writer/types/
bytes_property.rs1use crate::writer::{Inner, InnerPropertyType, InspectType, Property};
6use log::error;
7
8#[derive(Debug, PartialEq, Eq, Default)]
15pub struct BytesProperty {
16 inner: Inner<InnerPropertyType>,
17}
18
19impl<'t> Property<'t> for BytesProperty {
20 type Type = &'t [u8];
21
22 fn set(&self, value: &'t [u8]) {
23 if let Some(ref inner_ref) = self.inner.inner_ref() {
24 inner_ref
25 .state
26 .try_lock()
27 .and_then(|mut state| state.set_buffer_property(inner_ref.block_index, value))
28 .unwrap_or_else(|e| error!("Failed to set property. Error: {:?}", e));
29 }
30 }
31}
32
33impl InspectType for BytesProperty {
34 fn into_recorded(self) -> crate::writer::types::RecordedInspectType {
35 crate::writer::types::RecordedInspectType::BytesProperty(self)
36 }
37}
38
39crate::impl_inspect_type_internal!(BytesProperty);
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44 use crate::writer::Node;
45 use crate::writer::testing_utils::{GetBlockExt, get_state};
46 use inspect_format::{BlockType, Buffer, PropertyFormat};
47
48 #[fuchsia::test]
49 fn bytes_property() {
50 let default = BytesProperty::default();
52 default.set(&[0u8, 3u8]);
53
54 let state = get_state(4096);
55 let root = Node::new_root(state);
56 let node = root.create_child("node");
57 {
58 let property = node.create_bytes("property", b"test");
59 property.get_block::<_, Buffer>(|block| {
60 assert_eq!(block.block_type(), Some(BlockType::BufferValue));
61 assert_eq!(block.total_length(), 4);
62 assert_eq!(block.format(), Some(PropertyFormat::Bytes));
63 });
64 node.get_block::<_, inspect_format::Node>(|block| {
65 assert_eq!(block.child_count(), 1);
66 });
67
68 property.set(b"test-set");
69 property.get_block::<_, Buffer>(|block| {
70 assert_eq!(block.total_length(), 8);
71 });
72 }
73 node.get_block::<_, inspect_format::Node>(|block| {
74 assert_eq!(block.child_count(), 0);
75 });
76 }
77}