use super::{TraversalResult, TreeTraversalMode};
use crate::{ast::nodes::*, parser::lexer::SourcePosition};
pub trait AstConverting {
fn push_source_position(&mut self, start: &SourcePosition, end: &SourcePosition);
fn pop_source_position(&mut self);
fn emit_byte_str(
&mut self,
mode: TreeTraversalMode,
node: &NodeByteStr,
) -> Result<TraversalResult, String>;
fn emit_type_name_identifier(
&mut self,
mode: TreeTraversalMode,
node: &NodeTypeNameIdentifier,
) -> Result<TraversalResult, String>;
fn emit_imported_name(
&mut self,
mode: TreeTraversalMode,
node: &NodeImportedName,
) -> Result<TraversalResult, String>;
fn emit_import_declarations(
&mut self,
mode: TreeTraversalMode,
node: &NodeImportDeclarations,
) -> Result<TraversalResult, String>;
fn emit_meta_identifier(
&mut self,
mode: TreeTraversalMode,
node: &NodeMetaIdentifier,
) -> Result<TraversalResult, String>;
fn emit_variable_identifier(
&mut self,
mode: TreeTraversalMode,
node: &NodeVariableIdentifier,
) -> Result<TraversalResult, String>;
fn emit_builtin_arguments(
&mut self,
mode: TreeTraversalMode,
node: &NodeBuiltinArguments,
) -> Result<TraversalResult, String>;
fn emit_type_map_key(
&mut self,
mode: TreeTraversalMode,
node: &NodeTypeMapKey,
) -> Result<TraversalResult, String>;
fn emit_type_map_value(
&mut self,
mode: TreeTraversalMode,
node: &NodeTypeMapValue,
) -> Result<TraversalResult, String>;
fn emit_type_argument(
&mut self,
mode: TreeTraversalMode,
node: &NodeTypeArgument,
) -> Result<TraversalResult, String>;
fn emit_scilla_type(
&mut self,
mode: TreeTraversalMode,
node: &NodeScillaType,
) -> Result<TraversalResult, String>;
fn emit_type_map_entry(
&mut self,
mode: TreeTraversalMode,
node: &NodeTypeMapEntry,
) -> Result<TraversalResult, String>;
fn emit_address_type_field(
&mut self,
mode: TreeTraversalMode,
node: &NodeAddressTypeField,
) -> Result<TraversalResult, String>;
fn emit_address_type(
&mut self,
mode: TreeTraversalMode,
node: &NodeAddressType,
) -> Result<TraversalResult, String>;
fn emit_full_expression(
&mut self,
mode: TreeTraversalMode,
node: &NodeFullExpression,
) -> Result<TraversalResult, String>;
fn emit_message_entry(
&mut self,
mode: TreeTraversalMode,
node: &NodeMessageEntry,
) -> Result<TraversalResult, String>;
fn emit_pattern_match_expression_clause(
&mut self,
mode: TreeTraversalMode,
node: &NodePatternMatchExpressionClause,
) -> Result<TraversalResult, String>;
fn emit_atomic_expression(
&mut self,
mode: TreeTraversalMode,
node: &NodeAtomicExpression,
) -> Result<TraversalResult, String>;
fn emit_contract_type_arguments(
&mut self,
mode: TreeTraversalMode,
node: &NodeContractTypeArguments,
) -> Result<TraversalResult, String>;
fn emit_value_literal(
&mut self,
mode: TreeTraversalMode,
node: &NodeValueLiteral,
) -> Result<TraversalResult, String>;
fn emit_map_access(
&mut self,
mode: TreeTraversalMode,
node: &NodeMapAccess,
) -> Result<TraversalResult, String>;
fn emit_pattern(
&mut self,
mode: TreeTraversalMode,
node: &NodePattern,
) -> Result<TraversalResult, String>;
fn emit_argument_pattern(
&mut self,
mode: TreeTraversalMode,
node: &NodeArgumentPattern,
) -> Result<TraversalResult, String>;
fn emit_pattern_match_clause(
&mut self,
mode: TreeTraversalMode,
node: &NodePatternMatchClause,
) -> Result<TraversalResult, String>;
fn emit_blockchain_fetch_arguments(
&mut self,
mode: TreeTraversalMode,
node: &NodeBlockchainFetchArguments,
) -> Result<TraversalResult, String>;
fn emit_statement(
&mut self,
mode: TreeTraversalMode,
node: &NodeStatement,
) -> Result<TraversalResult, String>;
fn emit_remote_fetch_statement(
&mut self,
mode: TreeTraversalMode,
node: &NodeRemoteFetchStatement,
) -> Result<TraversalResult, String>;
fn emit_component_id(
&mut self,
mode: TreeTraversalMode,
node: &NodeComponentId,
) -> Result<TraversalResult, String>;
fn emit_component_parameters(
&mut self,
mode: TreeTraversalMode,
node: &NodeComponentParameters,
) -> Result<TraversalResult, String>;
fn emit_parameter_pair(
&mut self,
mode: TreeTraversalMode,
node: &NodeParameterPair,
) -> Result<TraversalResult, String>;
fn emit_component_body(
&mut self,
mode: TreeTraversalMode,
node: &NodeComponentBody,
) -> Result<TraversalResult, String>;
fn emit_statement_block(
&mut self,
mode: TreeTraversalMode,
node: &NodeStatementBlock,
) -> Result<TraversalResult, String>;
fn emit_typed_identifier(
&mut self,
mode: TreeTraversalMode,
node: &NodeTypedIdentifier,
) -> Result<TraversalResult, String>;
fn emit_type_annotation(
&mut self,
mode: TreeTraversalMode,
node: &NodeTypeAnnotation,
) -> Result<TraversalResult, String>;
fn emit_program(
&mut self,
mode: TreeTraversalMode,
node: &NodeProgram,
) -> Result<TraversalResult, String>;
fn emit_library_definition(
&mut self,
mode: TreeTraversalMode,
node: &NodeLibraryDefinition,
) -> Result<TraversalResult, String>;
fn emit_library_single_definition(
&mut self,
mode: TreeTraversalMode,
node: &NodeLibrarySingleDefinition,
) -> Result<TraversalResult, String>;
fn emit_contract_definition(
&mut self,
mode: TreeTraversalMode,
node: &NodeContractDefinition,
) -> Result<TraversalResult, String>;
fn emit_contract_field(
&mut self,
mode: TreeTraversalMode,
node: &NodeContractField,
) -> Result<TraversalResult, String>;
fn emit_with_constraint(
&mut self,
mode: TreeTraversalMode,
node: &NodeWithConstraint,
) -> Result<TraversalResult, String>;
fn emit_component_definition(
&mut self,
mode: TreeTraversalMode,
node: &NodeComponentDefinition,
) -> Result<TraversalResult, String>;
fn emit_procedure_definition(
&mut self,
mode: TreeTraversalMode,
node: &NodeProcedureDefinition,
) -> Result<TraversalResult, String>;
fn emit_transition_definition(
&mut self,
mode: TreeTraversalMode,
node: &NodeTransitionDefinition,
) -> Result<TraversalResult, String>;
fn emit_type_alternative_clause(
&mut self,
mode: TreeTraversalMode,
node: &NodeTypeAlternativeClause,
) -> Result<TraversalResult, String>;
fn emit_type_map_value_arguments(
&mut self,
mode: TreeTraversalMode,
node: &NodeTypeMapValueArguments,
) -> Result<TraversalResult, String>;
fn emit_type_map_value_allowing_type_arguments(
&mut self,
mode: TreeTraversalMode,
node: &NodeTypeMapValueAllowingTypeArguments,
) -> Result<TraversalResult, String>;
}