Skip to main content

scarf_syntax/specify_section/
specify_block_terminals.rs

1// =======================================================================
2// specify_block_terminals.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.7.3
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct ListOfPathInputs<'a>(
9    pub SpecifyInputTerminalDescriptor<'a>,
10    pub  Vec<(
11        Metadata<'a>, // ,
12        SpecifyInputTerminalDescriptor<'a>,
13    )>,
14);
15
16#[derive(Clone, Debug, PartialEq)]
17pub struct ListOfPathOutputs<'a>(
18    pub SpecifyOutputTerminalDescriptor<'a>,
19    pub  Vec<(
20        Metadata<'a>, // ,
21        SpecifyOutputTerminalDescriptor<'a>,
22    )>,
23);
24
25#[derive(Clone, Debug, PartialEq)]
26pub struct SpecifyInputTerminalDescriptor<'a>(
27    pub InputIdentifier<'a>,
28    pub  Option<(
29        Metadata<'a>, // [
30        ConstantRangeExpression<'a>,
31        Metadata<'a>, // ]
32    )>,
33);
34
35#[derive(Clone, Debug, PartialEq)]
36pub struct SpecifyOutputTerminalDescriptor<'a>(
37    pub OutputIdentifier<'a>,
38    pub  Option<(
39        Metadata<'a>, // [
40        ConstantRangeExpression<'a>,
41        Metadata<'a>, // ]
42    )>,
43);
44
45#[derive(Clone, Debug, PartialEq)]
46pub enum InputIdentifier<'a> {
47    Input(Box<InputPortIdentifier<'a>>),
48    Inout(Box<InoutPortIdentifier<'a>>),
49    Interface(
50        Box<(
51            InterfaceIdentifier<'a>,
52            Metadata<'a>, // .
53            PortIdentifier<'a>,
54        )>,
55    ),
56}
57
58#[derive(Clone, Debug, PartialEq)]
59pub enum OutputIdentifier<'a> {
60    Output(Box<OutputPortIdentifier<'a>>),
61    Inout(Box<InoutPortIdentifier<'a>>),
62    Interface(
63        Box<(
64            InterfaceIdentifier<'a>,
65            Metadata<'a>, // .
66            PortIdentifier<'a>,
67        )>,
68    ),
69}