@callback query(reducer :: struct()) :: list()
@callback reduce(reducer :: struct(), events :: [Ariadne.Flow.Envelope.t()]) :: any()