# Copyright (c) 2022 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

config ZEPHYR_ZCBOR_MODULE
	bool

config ZCBOR
	bool "zcbor CBOR library"
	depends on ZEPHYR_ZCBOR_MODULE
	help
	  zcbor CBOR encoder/decoder library

if ZCBOR

config ZCBOR_CANONICAL
	bool "Produce canonical CBOR"
	help
	  Enabling this will prevent zcbor from creating lists and maps with
	  indefinite-length arrays (it will still decode them properly).

config ZCBOR_STOP_ON_ERROR
	bool "Stop on error when processing (Must also be enabled in state var)"
	help
	  Make the stop_on_error functionality available. Note that it still
	  needs to be enabled in the state variable
	  (`state->constant_state->stop_on_error`).
	  This makes all functions abort their execution if called when an error
	  has already happened.

config ZCBOR_VERBOSE
	bool "Make zcbor code print messages"

config ZCBOR_ASSERT
	def_bool ASSERT

config ZCBOR_BIG_ENDIAN
	def_bool BIG_ENDIAN

config ZCBOR_MAX_STR_LEN
	int "Default max length when calling zcbor_tstr_put_term()"
	default 256
	help
	  This can be manually used if no other value is readily available, but
	  using this is discouraged.

endif # ZCBOR
