/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once

#include <libnvme.h>

#include "args.h"

struct lm_print_ops {
	void (*controller_state_data)(struct nvme_lm_controller_state_data *data, size_t len,
				      __u32 offset);
	void (*controller_data_queue)(struct nvme_lm_ctrl_data_queue_fid_data *data);
	nvme_print_flags_t flags;
};

struct lm_print_ops *lm_get_stdout_print_ops(nvme_print_flags_t flags);
struct lm_print_ops *lm_get_binary_print_ops(nvme_print_flags_t flags);

#ifdef CONFIG_JSONC
struct lm_print_ops *lm_get_json_print_ops(nvme_print_flags_t flags);
#else
static inline struct lm_print_ops *lm_get_json_print_ops(nvme_print_flags_t flags)
{
	return NULL;
}
#endif

void lm_show_controller_state_data(struct nvme_lm_controller_state_data *data, size_t len,
				   __u32 offset, nvme_print_flags_t flags);
void lm_show_controller_data_queue(struct nvme_lm_ctrl_data_queue_fid_data *data,
				   nvme_print_flags_t flags);
