mod envelope;
mod error;
#[cfg(feature = "graphql")]
mod host;
mod local;
mod remote;
pub use envelope::{
CommandDispatchEnvelope, CommandDispatchReceipt, COMMAND_DISPATCH_ENVELOPE_VERSION,
};
pub use error::CommandDispatchError;
#[cfg(feature = "graphql")]
pub(crate) use host::{validate_principal_session, validate_principal_session_if_present};
#[cfg(feature = "graphql")]
pub use host::{CommandHost, HttpCommandHost, LocalCommandHost, SharedCommandHost};
pub use local::LocalCommandDispatcher;
pub use remote::{
RemoteCommandDispatcher, RemoteDispatchConfig, RemoteTrustMode,
APPROVED_REMOTE_DISPATCH_PROFILE,
};
use crate::microsvc::{CommandRequest, CommandResponse};
use async_trait::async_trait;
use std::sync::Arc;
#[async_trait]
pub trait CommandDispatcher: Send + Sync {
async fn dispatch(
&self,
request: &CommandRequest,
) -> Result<CommandResponse, CommandDispatchError>;
fn kind(&self) -> &'static str;
}
pub type SharedCommandDispatcher = Arc<dyn CommandDispatcher>;