/*
 * Copyright (c) 2017 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef __NATS_H
#define __NATS_H

#include <stdint.h>
#include <net/net_context.h>

struct nats_msg {
	const char *subject;
	const char *sid;
	const char *reply_to;
	const char *payload;
	size_t payload_len;
};

struct nats {
	struct net_context *conn;

	int (*on_auth_required)(const struct nats *nats,
				char *user, size_t *user_len,
				char *pass, size_t *pass_len);
	int (*on_message)(const struct nats *nats,
			  const struct nats_msg *msg);
};

int nats_connect(struct nats *nats, struct sockaddr *addr, socklen_t addrlen);
int nats_disconnect(struct nats *nats);

int nats_subscribe(const struct nats *nats,
		   const char *subject, size_t subject_len,
		   const char *queue_group, size_t queue_group_len,
		   const char *sid, size_t sid_len);
int nats_unsubscribe(const struct nats *nats,
		     const char *sid, size_t sid_len,
		     size_t max_msgs);

int nats_publish(const struct nats *nats,
		 const char *subject, size_t subject_len,
		 const char *reply_to, size_t reply_to_len,
		 const char *payload, size_t payload_len);

#endif /* __NATS_H */
