dfir_lang/graph/ops/
unzip.rs
1use quote::quote_spanned;
2use syn::parse_quote;
3
4use super::{
5 OperatorCategory, OperatorConstraints, OperatorWriteOutput, WriteContextArgs,
6 RANGE_0, RANGE_1,
7};
8
9pub const UNZIP: OperatorConstraints = OperatorConstraints {
20 name: "unzip",
21 categories: &[OperatorCategory::MultiOut],
22 hard_range_inn: RANGE_1,
23 soft_range_inn: RANGE_1,
24 hard_range_out: &(2..=2),
25 soft_range_out: &(2..=2),
26 num_args: 0,
27 persistence_args: RANGE_0,
28 type_args: RANGE_0,
29 is_external_input: false,
30 has_singleton_output: false,
31 flo_type: None,
32 ports_inn: None,
33 ports_out: Some(|| super::PortListSpec::Fixed(parse_quote!(0, 1))),
34 input_delaytype_fn: |_| None,
35 write_fn: |&WriteContextArgs {
36 root,
37 op_span,
38 ident,
39 outputs,
40 is_pull,
41 ..
42 },
43 _| {
44 assert!(!is_pull);
45 let output0 = &outputs[0];
46 let output1 = &outputs[1];
47 let write_iterator = quote_spanned! {op_span=>
48 let #ident = #root::pusherator::unzip::Unzip::new(#output0, #output1);
49 };
50 Ok(OperatorWriteOutput {
51 write_iterator,
52 ..Default::default()
53 })
54 },
55};