solidity_language_server/solc_ast/
source_units.rs1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6use super::{
7 ContractDefinition, EnumDefinition, ErrorDefinition, FunctionDefinition, NodeID,
8 StructDefinition, UserDefinedValueTypeDefinition, UsingForDirective, VariableDeclaration,
9};
10
11#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
15#[serde(tag = "nodeType")]
16pub enum SourceUnitNode {
17 PragmaDirective(PragmaDirective),
18 ImportDirective(ImportDirective),
19 ContractDefinition(ContractDefinition),
20 FunctionDefinition(FunctionDefinition),
22 StructDefinition(StructDefinition),
24 EnumDefinition(EnumDefinition),
26 ErrorDefinition(ErrorDefinition),
28 UsingForDirective(UsingForDirective),
30 VariableDeclaration(VariableDeclaration),
32 UserDefinedValueTypeDefinition(UserDefinedValueTypeDefinition),
34}
35
36#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
38#[serde(rename_all = "camelCase")]
39pub struct PragmaDirective {
40 pub id: NodeID,
41 pub src: String,
42 #[serde(default)]
43 pub literals: Vec<String>,
44}
45
46#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
48#[serde(rename_all = "camelCase")]
49pub struct ImportDirective {
50 pub id: NodeID,
51 pub src: String,
52 #[serde(default)]
54 pub file: Option<String>,
55 #[serde(default)]
57 pub absolute_path: Option<String>,
58 #[serde(default)]
60 pub unit_alias: Option<String>,
61 #[serde(default)]
62 pub name_location: Option<String>,
63 #[serde(default)]
65 pub source_unit: Option<NodeID>,
66 #[serde(default)]
68 pub scope: Option<NodeID>,
69 #[serde(default)]
71 pub symbol_aliases: Vec<serde_json::Value>,
72}
73
74#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
76#[serde(rename_all = "camelCase")]
77pub struct SourceUnit {
78 pub id: NodeID,
79 pub src: String,
80 #[serde(default)]
81 pub absolute_path: Option<String>,
82 #[serde(default)]
84 pub license: Option<String>,
85 #[serde(default)]
87 pub exported_symbols: HashMap<String, Vec<NodeID>>,
88 #[serde(default)]
89 pub nodes: Vec<SourceUnitNode>,
90}