use super::super::visitors::prelude::*;
macro_rules! stop {
($e:expr, $leave_fn:expr) => {
if $e? == VisitRes::Stop {
return $leave_fn;
}
};
}
pub trait Walker<'script>: QueryWalker<'script> + DeployVisitor<'script> {
fn walk_flow_definition(&mut self, defn: &mut FlowDefinition<'script>) -> Result<()> {
stop!(
self.visit_flow_definition(defn),
self.leave_flow_definition(defn)
);
self.walk_definitional_args(&mut defn.params)?;
for create in &mut defn.creates {
self.walk_create_stmt(create)?;
}
for connection in &mut defn.connections {
self.walk_connect_stmt(connection)?;
}
self.leave_flow_definition(defn)
}
fn walk_create_stmt(&mut self, create: &mut CreateStmt<'script>) -> Result<()> {
stop!(
self.visit_create_stmt(create),
self.leave_create_stmt(create)
);
self.walk_creational_with(&mut create.with)?;
self.walk_create_target_definition(&mut create.defn)?;
self.leave_create_stmt(create)
}
fn walk_connect_stmt(&mut self, connect: &mut ConnectStmt) -> Result<()> {
stop!(
self.visit_connect_stmt(connect),
self.leave_connect_stmt(connect)
);
self.walk_deploy_edpoint(connect.from_mut())?;
self.walk_deploy_edpoint(connect.to_mut())?;
self.leave_connect_stmt(connect)
}
fn walk_deploy_edpoint(&mut self, endpoint: &mut DeployEndpoint) -> Result<()> {
stop!(
self.visit_deploy_endpoint(endpoint),
self.leave_deploy_endpoint(endpoint)
);
self.leave_deploy_endpoint(endpoint)
}
fn walk_create_target_definition(
&mut self,
defn: &mut CreateTargetDefinition<'script>,
) -> Result<()> {
stop!(
self.visit_create_target_definition(defn),
self.leave_create_target_definition(defn)
);
match defn {
CreateTargetDefinition::Connector(c) => self.walk_connector_definition(c)?,
CreateTargetDefinition::Pipeline(p) => self.walk_pipeline_definition(p)?,
}
self.leave_create_target_definition(defn)
}
fn walk_connector_definition(&mut self, defn: &mut ConnectorDefinition<'script>) -> Result<()> {
stop!(
self.visit_connector_definition(defn),
self.leave_connector_definition(defn)
);
self.walk_definitinal_args_with(&mut defn.params)?;
self.leave_connector_definition(defn)
}
}