File: System\Formats\Cbor\Writer\CborWriterOptions.cs
Web Access
Project: src\runtime\src\libraries\System.Formats.Cbor\src\System.Formats.Cbor.csproj (System.Formats.Cbor)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace System.Formats.Cbor
{
    /// <summary>Provides the ability for the user to define custom behavior when writing CBOR data.</summary>
    public sealed class CborWriterOptions
    {
        private CborConformanceMode _conformanceMode = CborConformanceMode.Strict;
        private int _maxDepth = -1;
        private int _initialCapacity = -1;

        /// <summary>
        ///   Initializes a new instance of the <see cref="CborWriterOptions"/> class.
        /// </summary>
        public CborWriterOptions()
        {
        }

        /// <summary>Gets or sets the conformance mode used when writing CBOR data.</summary>
        /// <value>The conformance mode. The default is <see cref="CborConformanceMode.Strict" />.</value>
        /// <exception cref="ArgumentOutOfRangeException">
        ///   <paramref name="value" /> is not a defined <see cref="CborConformanceMode" /> value.
        /// </exception>
        public CborConformanceMode ConformanceMode
        {
            get => _conformanceMode;
            set
            {
                CborConformanceModeHelpers.Validate(value);
                _conformanceMode = value;
            }
        }

        /// <summary>
        ///   Gets or sets a value that indicates whether the writer automatically converts
        ///   indefinite-length encodings into definite-length equivalents.
        /// </summary>
        /// <value>
        ///   <see langword="true" /> if the writer should automatically convert indefinite-length
        ///   encodings; otherwise, <see langword="false" />.
        ///   The default is <see langword="false" />.
        /// </value>
        public bool ConvertIndefiniteLengthEncodings { get; set; }

        /// <summary>
        ///   Gets or sets a value that indicates whether multiple root-level CBOR data items are permitted.
        /// </summary>
        /// <value>
        ///   <see langword="true" /> if the writer allows multiple root-level values;
        ///   otherwise, <see langword="false" />.
        ///   The default is <see langword="false" />.
        /// </value>
        public bool AllowMultipleRootLevelValues { get; set; }

        /// <summary>
        ///   Gets or sets the maximum depth allowed when writing CBOR data, with the default (-1)
        ///   indicating a runtime-chosen maximum depth.
        /// </summary>
        /// <remarks>
        ///   The MaxDepth value is primarily to limit the amount of work the writer performs in
        ///   validating data in methods such as <see cref="CborWriter.WriteEncodedValue"/>.
        /// </remarks>
        /// <value>
        ///   The maximum depth allowed when writing CBOR data,
        ///   or -1 to indicate a runtime-chosen maximum depth.
        /// </value>
        /// <exception cref="ArgumentOutOfRangeException">
        ///   <paramref name="value" /> is less than -1.
        /// </exception>
        public int MaxDepth
        {
            get => _maxDepth;
            set
            {
                ArgumentOutOfRangeException.ThrowIfLessThan(value, -1);
                _maxDepth = value;
            }
        }

        /// <summary>
        ///  Gets or sets the initial capacity, in bytes, of the buffer used when writing CBOR data.
        /// </summary>
        /// <value>
        ///   The initial capacity, in bytes, of the buffer used when writing CBOR data,
        ///   or -1 to indicate a runtime-chosen initial capacity.
        /// </value>
        /// <exception cref="ArgumentOutOfRangeException">
        ///   <paramref name="value" /> is less than -1.
        /// </exception>
        public int InitialCapacity
        {
            get => _initialCapacity;
            set
            {
                ArgumentOutOfRangeException.ThrowIfLessThan(value, -1);
                _initialCapacity = value;
            }
        }
    }
}