jeff/reader/value/
function_io.rs1use crate::capnp::jeff_capnp;
4use crate::reader::metadata::sealed::HasMetadataSealed;
5use crate::reader::string_table::StringTable;
6
7use crate::types::Type;
8
9use super::WireValue;
10
11#[derive(Clone, Copy, Debug)]
15pub struct FunctionIOValue<'a> {
16 value_type: Type,
18 metadata: capnp::struct_list::Reader<'a, jeff_capnp::meta::Owned>,
20 strings: StringTable<'a>,
22}
23
24impl<'a> FunctionIOValue<'a> {
25 pub(crate) fn read_capnp(
27 value: jeff_capnp::value::Reader<'a>,
28 strings: StringTable<'a>,
29 ) -> Self {
30 let value_type = value
31 .get_type()
32 .map(Type::read_capnp)
33 .expect("Type should be present");
34 let metadata = value.get_metadata().expect("Metadata should be present");
35 Self {
36 value_type,
37 metadata,
38 strings,
39 }
40 }
41
42 pub fn ty(&self) -> Type {
44 self.value_type
45 }
46}
47
48impl<'a> HasMetadataSealed for FunctionIOValue<'a> {
49 fn strings(&self) -> StringTable<'a> {
50 self.strings
51 }
52
53 fn metadata_reader(&self) -> capnp::struct_list::Reader<'a, jeff_capnp::meta::Owned> {
54 self.metadata
55 }
56}
57
58impl<'a> From<WireValue<'a>> for FunctionIOValue<'a> {
59 fn from(wire_value: WireValue<'a>) -> Self {
60 Self {
61 value_type: wire_value.value_type,
62 metadata: wire_value.metadata,
63 strings: wire_value.strings,
64 }
65 }
66}