-spec ack_msg(Conn :: nats:conn(), AckType :: atom() | tuple(), Sync :: boolean(), Opts :: map()) -> map().
-spec create(Conn :: nats:conn(), Stream :: iodata()) -> {ok, map()} | {error, any()}.
-spec create(Conn :: nats:conn(), Stream :: iodata(), Opts :: map()) -> {ok, map()} | {error, any()}; (Conn :: nats:conn(), Stream :: iodata(), Name :: iodata()) -> {ok, map()} | {error, any()}.
-spec create(Conn :: nats:conn(), Stream :: iodata(), Config :: map(), Opts :: map()) -> {ok, map()} | {error, any()}; (Conn :: nats:conn(), Stream :: iodata(), Name :: iodata(), Opts :: map()) -> {ok, map()} | {error, any()}.
-spec create(Conn :: nats:conn(), Stream :: iodata(), Name :: iodata(), Config :: map(), Opts :: map()) -> {ok, map()} | {error, any()}.
-spec delete(Conn :: nats:conn(), Config :: map()) -> {ok, map()} | {error, timeout}.
-spec delete(Conn :: nats:conn(), #{name := iodata(), stream_name := iodata(), _ => _}, Opts :: map()) -> {ok, map()} | {error, any()}; (Conn :: nats:conn(), Stream :: iodata(), Name :: iodata()) -> {ok, map()} | {error, any()}.
-spec delete(Conn :: nats:conn(), Stream :: iodata(), Name :: iodata(), Opts :: map()) -> {ok, map()} | {error, any()}.
-spec get(Conn :: nats:conn(), #{name := iodata(), stream_name := iodata(), _ => _}) -> {ok, map()} | {error, any()}.
-spec get(Conn :: nats:conn(), #{name := iodata(), stream_name := iodata(), _ => _}, Opts :: map()) -> {ok, map()} | {error, any()}; (Conn :: nats:conn(), Stream :: iodata(), Name :: iodata()) -> {ok, map()} | {error, any()}.
-spec get(Conn :: nats:conn(), Stream :: iodata(), Name :: iodata(), Opts :: map()) -> {ok, map()} | {error, any()}.
-spec msg_next(Conn :: nats:conn(), #{config := #{deliver_subject := iodata(), _ => _}, name := iodata(), stream_name := iodata(), _ => _}, Opts :: map()) -> ok | {error, timeout}.
-spec msg_next(Conn :: nats:conn(), Stream :: iodata(), Name :: iodata(), ReplyTo :: iodata(), Opts :: map()) -> ok | {error, timeout}.
-spec msg_next(Conn :: nats:conn(), Stream :: iodata(), Name :: iodata(), ReplyTo :: iodata(), Request :: map() | integer(), Opts :: map()) -> ok | {error, any()}.
-spec subscribe(Conn :: nats:conn(), Config :: map(), Opts :: map()) -> {ok, pid()} | {error, any()} | {error, not_deliver_subject}.
-spec subscribe(Conn :: nats:conn(), Stream :: iodata(), Name :: iodata(), Opts :: map()) -> {ok, pid()} | {error, any()} | {error, not_a_push_consumer}.
-spec unsubscribe(Conn :: nats:conn(), Config :: map(), Opts :: map()) -> ok | {error, any()} | {error, not_a_a_push_consumer}.
-spec unsubscribe(Conn :: nats:conn(), Stream :: iodata(), Name :: iodata(), Opts :: map()) -> ok | {error, any()} | {error, not_a_push_consumer}.