pub mod command_consistency;
pub mod command_dispatch_result;
pub mod command_dispatcher;
pub mod command_dispatcher_error;
pub mod command_failure_report;
pub mod command_handled;
pub mod command_handler;
pub mod command_hash;
pub mod command_hash_error;
pub mod command_hasher;
pub mod command_hasher_error;
pub mod command_name;
pub mod command_name_owned;
pub mod command_name_owned_error;
pub mod command_options;
pub mod command_selector;
pub mod command_worker;
pub mod command_worker_error;
pub mod default_command_dispatcher;
pub mod default_command_worker;
pub mod idempotency_begin_result;
pub mod idempotency_id;
pub mod idempotency_id_error;
pub mod idempotency_output;
pub mod idempotency_output_error;
pub mod idempotency_service;
pub mod idempotency_service_error;
pub mod idempotency_state;

pub use command_consistency::CommandConsistency;
pub use command_dispatch_result::CommandDispatchResult;
pub use command_dispatcher::CommandDispatcher;
pub use command_dispatcher_error::CommandDispatcherError;
pub use command_failure_report::CommandFailureReport;
pub use command_handled::CommandHandled;
pub use command_handler::CommandHandler;
pub use command_hash::CommandHash;
pub use command_hash_error::CommandHashError;
pub use command_hasher::CommandHasher;
pub use command_hasher_error::CommandHasherError;
pub use command_name::CommandName;
pub use command_name_owned::CommandNameOwned;
pub use command_name_owned_error::CommandNameOwnedError;
pub use command_options::CommandOptions;
pub use command_selector::CommandSelector;
pub use command_worker::CommandWorker;
pub use command_worker_error::CommandWorkerError;
pub use default_command_dispatcher::DefaultCommandDispatcher;
pub use default_command_worker::DefaultCommandWorker;
pub use idempotency_begin_result::IdempotencyBeginResult;
pub use idempotency_id::IdempotencyId;
pub use idempotency_id_error::IdempotencyIdError;
pub use idempotency_output::IdempotencyOutput;
pub use idempotency_output_error::IdempotencyOutputError;
pub use idempotency_service::IdempotencyService;
pub use idempotency_service_error::IdempotencyServiceError;
pub use idempotency_state::IdempotencyState;

use serde::Serialize;
use serde::de::DeserializeOwned;

pub trait Command: Serialize + DeserializeOwned + Send + 'static {
    const NAME: CommandName;
}
