dfir_lang/graph/ops/
dest_sink_serde.rs
1use quote::quote_spanned;
2
3use super::{
4 OperatorCategory, OperatorConstraints, OperatorWriteOutput, RANGE_0, RANGE_1, WriteContextArgs,
5 make_missing_runtime_msg,
6};
7
8pub const DEST_SINK_SERDE: OperatorConstraints = OperatorConstraints {
27 name: "dest_sink_serde",
28 categories: &[OperatorCategory::Sink],
29 hard_range_inn: RANGE_1,
30 soft_range_inn: RANGE_1,
31 hard_range_out: RANGE_0,
32 soft_range_out: RANGE_0,
33 num_args: 1,
34 persistence_args: RANGE_0,
35 type_args: RANGE_0,
36 is_external_input: false,
37 has_singleton_output: false,
38 flo_type: None,
39 ports_inn: None,
40 ports_out: None,
41 input_delaytype_fn: |_| None,
42 write_fn: |wc @ &WriteContextArgs {
43 root,
44 op_span,
45 ident,
46 op_name,
47 ..
48 },
49 diagnostics| {
50 let missing_runtime_msg = make_missing_runtime_msg(op_name);
51
52 let OperatorWriteOutput {
53 write_prologue,
54 write_prologue_after,
55 write_iterator,
56 write_iterator_after,
57 } = (super::dest_sink::DEST_SINK.write_fn)(wc, diagnostics)?;
58
59 let write_iterator = quote_spanned! {op_span=>
60 ::std::debug_assert!(#root::tokio::runtime::Handle::try_current().is_ok(), #missing_runtime_msg);
61 #write_iterator
62 let #ident = #root::pusherator::map::Map::new(
63 |(payload, addr)| (#root::util::serialize_to_bytes(payload), addr),
64 #ident,
65 );
66 };
67
68 Ok(OperatorWriteOutput {
69 write_prologue,
70 write_prologue_after,
71 write_iterator,
72 write_iterator_after,
73 })
74 },
75};