// 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_BUGREPORT_BUG_REPORTER_H_
#define SRC_DEVELOPER_BUGREPORT_BUG_REPORTER_H_

#include <lib/sys/cpp/service_directory.h>

#include <memory>
#include <set>
#include <string>

namespace fuchsia {
namespace bugreport {

// Makes a JSON file representing a bug report containing the feedback data
// (annotations and attachments) collected from fuchsia.feedback.DataProvider
// from |services|.
//
// By default:
//   - all the attachments are reported. Use |attachment_allowlist| to restrict
//     the attachments to specific keys, e.g., to minimize the output.
//   - the JSON file is streamed to stdout. Use |out_filename| to output it to
//     a file.
bool MakeBugReport(std::shared_ptr<::sys::ServiceDirectory> services,
                   const std::set<std::string>& attachment_allowlist = {},
                   const char* out_filename = nullptr);

}  // namespace bugreport
}  // namespace fuchsia

#endif  // SRC_DEVELOPER_BUGREPORT_BUG_REPORTER_H_
