-spec create_broadcast(Sender, Payload) -> Message when Sender :: binary() | atom(), Payload :: map(), Message :: map().
-spec create_event(Sender, EventName, EventData) -> Message when Sender :: binary() | atom(), EventName :: binary() | atom(), EventData :: map(), Message :: map().
-spec create_message(Type, Sender, Payload) -> Message when Type :: binary(), Sender :: binary() | atom(), Payload :: map(), Message :: map().
-spec create_request(Sender, Receiver, Payload) -> Message when Sender :: binary() | atom(), Receiver :: binary() | atom(), Payload :: map(), Message :: map().
-spec create_response(CorrelationId, Sender, Receiver, Payload) -> Message when CorrelationId :: binary(), Sender :: binary() | atom(), Receiver :: binary() | atom(), Payload :: map(), Message :: map().
-spec get_correlation_id(Message) -> CorrelationId when Message :: map(), CorrelationId :: binary() | undefined.
-spec get_message_id(Message) -> Id when Message :: map(), Id :: binary().
-spec get_payload(Message) -> Payload when Message :: map(), Payload :: map().
-spec get_receiver(Message) -> Receiver when Message :: map(), Receiver :: binary() | undefined.
-spec get_sender(Message) -> Sender when Message :: map(), Sender :: binary().
-spec get_timestamp(Message) -> Timestamp when Message :: map(), Timestamp :: integer().
-spec get_type(Message) -> Type when Message :: map(), Type :: binary().
-spec is_broadcast(Message) -> boolean() when Message :: map().
-spec is_event(Message) -> boolean() when Message :: map().
-spec is_request(Message) -> boolean() when Message :: map().
-spec is_response(Message) -> boolean() when Message :: map().
-spec validate_message(Message) -> Result when Message :: map(), Result :: ok | {error, Reason}, Reason :: term().