1use {*};
2
3#[derive(Clone, Copy, Debug, PartialEq)]
5pub enum SourceUnit<'ast> {
6 PragmaDirective(PragmaDirective<'ast>),
7 ImportDirective(ImportDirective<'ast>),
8 ContractDefinition(ContractDefinition<'ast>),
9}
10
11#[derive(Clone, Copy, Debug, PartialEq)]
12pub struct PragmaDirective<'ast> {
13 pub version: &'ast str,
14}
15
16#[derive(Clone, Copy, Debug, PartialEq)]
17pub struct Import<'ast> {
18 pub symbol: IdentifierNode<'ast>,
19 pub alias: Option<IdentifierNode<'ast>>,
20}
21
22#[derive(Clone, Copy, Debug, PartialEq)]
23pub enum ImportDirective<'ast> {
24 Global {
26 source: Node<'ast, StringLiteral<'ast>>,
27 alias: Option<IdentifierNode<'ast>>,
28 },
29
30 From {
32 symbol: Option<IdentifierNode<'ast>>,
33 alias: Option<IdentifierNode<'ast>>,
34 source: Node<'ast, StringLiteral<'ast>>,
35 },
36
37 ManyFrom {
39 imports: NodeList<'ast, Import<'ast>>,
40 source: Node<'ast, StringLiteral<'ast>>,
41 },
42}
43
44impl_from! {
45 PragmaDirective => SourceUnit::PragmaDirective,
46 ImportDirective => SourceUnit::ImportDirective,
47 ContractDefinition => SourceUnit::ContractDefinition,
48}