diff --git a/crates/starknet_sequencer_node/src/servers.rs b/crates/starknet_sequencer_node/src/servers.rs index 2e98acd0b44..3e14f7a7b11 100644 --- a/crates/starknet_sequencer_node/src/servers.rs +++ b/crates/starknet_sequencer_node/src/servers.rs @@ -44,6 +44,54 @@ pub struct SequencerNodeServers { wrapper_servers: WrapperServers, } + +/// A macro for creating a component server, determined by the component's execution mode. +/// Returns a remote server if the component is run with remote configuration, otherwise None. +/// +/// # Arguments +/// +/// * $execution_mode - A reference to the component's execution mode, i.e., type +/// &ComponentExecutionMode. +/// * $local_client - The local client to be used for the remote server initialization if the +/// execution mode is enabled(Remote). +/// * $config - The remote server configuration. +/// +/// # Returns +/// +/// An Option>> containing the +/// server if the execution mode is enabled(Remote), or None if the execution mode is Disabled. +/// +/// # Example +/// +/// ```rust,ignore +/// let batcher_remote_server = create_remote_server!( +/// &config.components.batcher.execution_mode, +/// local_client, +/// config.remote_server_config +/// ); +/// match batcher_remote_server { +/// Some(server) => println!("Remote server created: {:?}", server), +/// None => println!("Remote server not created because the execution mode is not remote."), +/// } +/// ``` +#[macro_export] +macro_rules! create_remote_server { + ($execution_mode:expr, $local_client:expr, $config:expr, $client_type:ty) => { + match *$execution_mode { + ComponentExecutionMode::Remote => { + if let (Some(local_client), Some(config)) = ($local_client, $config) { + // Cast local_client to the specified generic type + let typed_client: Arc<$client_type> = local_client; + Some(Box::new(RemoteComponentServer::new(typed_client, config))) + } else { + None + } + } + _ => None, + } + }; +} + /// A macro for creating a component server, determined by the component's execution mode. Returns a /// local server if the component is run locally, otherwise None. ///