#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

config TINYCBOR
	bool
	prompt "tinyCBOR Support"
	default n
	help
	  This option enables the tinyCBOR library.

if TINYCBOR

config CBOR_NO_DFLT_WRITER
	bool
	prompt "No default writer support"
	default n
	help
	  This option specifies whether a default writer exists.

config CBOR_NO_DFLT_READER
	bool
	prompt "No default reader support"
	default n
	help
	  This option specifies whether a default reader exists.

config CBOR_ENCODER_NO_CHECK_USER
	bool
	prompt "No encoder checks for user args for validity"
	default n
	help
	  This option specifies whether a check user exists for a cbor encoder.

config CBOR_PARSER_MAX_RECURSIONS
	int
	prompt "Parser max recursions"
	default 1024
	help
	  This option specifies max recursions for the parser.

config CBOR_PARSER_NO_STRICT_CHECKS
	bool
	prompt "No strict parser checks"
	default n
	help
	  This option enables the strict parser checks.

config CBOR_NO_FLOATING_POINT
	bool
	select NEWLIB_LIBC
	prompt "No Floating point support"
	default y
	help
	  This option enables floating point support.

config CBOR_NO_HALF_FLOAT_TYPE
	bool
	select NEWLIB_LIBC
	prompt "No Half float type support"
	default y
	help
	  This option enables half float type support.

config CBOR_WITHOUT_OPEN_MEMSTREAM
	bool
	prompt "Without open memstream"
	default y
	help
	  This option enables open memstream support.

endif #TINYCBOR
