// Copyright 2018 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 GARNET_BIN_IQUERY_UTILS_H_
#define GARNET_BIN_IQUERY_UTILS_H_

#include <string>

#include <fuchsia/inspect/cpp/fidl.h>
#include <lib/fxl/macros.h>

#include "garnet/bin/iquery/options.h"

// Utility functions that are transversal to modes.

namespace iquery {

// Helper wrapper over objects that enables us to represent the tree
// relationship between them.
struct ObjectNode {
  ObjectNode();
  ObjectNode(std::string name);
  ObjectNode(fuchsia::inspect::Object);

  FXL_DISALLOW_COPY_AND_ASSIGN(ObjectNode);

  // Move and assign.
  ObjectNode(ObjectNode&&);
  ObjectNode& operator=(ObjectNode&&);

  // Used in the output stage for formatting.
  std::string basepath;
  fuchsia::inspect::Object object;
  std::vector<ObjectNode> children;
};

// If option is none, will return the provided name,
// full_paths return the given path and absolute will create the absolute path.
std::string FormatPath(Options::PathFormatting, const std::string& path,
                       const std::string& name = "");

// Format a string handling the case where the string is not a valid UTF8
// string by outputting a hex dump.
std::string FormatStringHexFallback(fxl::StringView val);

// Format a string handling the case where the string is not a valid UTF8
// string by outputting the string encoded in Base64.
std::string FormatStringBase64Fallback(fxl::StringView val);

// Metric values have a lot of representations (int, uint, etc.).
// This functions returns a string representing the correct value.
std::string FormatMetricValue(const fuchsia::inspect::Metric& metric);

bool IsStringPrintable(fxl::StringView input);

}  // namespace iquery

#endif  // GARNET_BIN_IQUERY_UTILS_H_
