// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_DEVELOPER_DEBUG_ZXDB_EXPR_FORMAT_OPTIONS_H_
#define SRC_DEVELOPER_DEBUG_ZXDB_EXPR_FORMAT_OPTIONS_H_

#include <stdint.h>

namespace zxdb {

struct FormatOptions {
  enum class NumFormat { kDefault, kUnsigned, kSigned, kHex, kChar, kBin };

  // Maximum number of elements to print in an array. For strings we'll speculatively fetch this
  // much data since we don't know mow long the string will be in advance. This means that
  // increasing this will make all string printing (even small strings) slower.
  //
  // If we want to support larger sizes, we may want to add a special memory request option where
  // the debug agent fetches until a null terminator is reached.
  uint32_t max_array_size = 256;

  // Format to apply to numeric types.
  NumFormat num_format = NumFormat::kDefault;

  // When set, hex and bin numbers will be 0-padded out to the size of their data type.
  bool zero_pad_hex_bin = false;

  bool enable_pretty_printing = true;
};

}  // namespace zxdb

#endif  // SRC_DEVELOPER_DEBUG_ZXDB_EXPR_FORMAT_OPTIONS_H_
