// Copyright 2018 The Chromium OS 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 RUNTIME_PROBE_COMPONENT_CATEGORY_H_
#define RUNTIME_PROBE_COMPONENT_CATEGORY_H_

#include <map>
#include <memory>
#include <string>
#include <vector>

#include <base/values.h>
#include <gtest/gtest.h>

#include "runtime_probe/probe_statement.h"

namespace runtime_probe {

class ComponentCategory {
  // A component category is defined in following format:
  //
  // {
  //   <component_name:string>: <statement:ProbeStatement>,
  //   ...
  // }
 public:
  static std::unique_ptr<ComponentCategory> FromValue(
      const std::string& category_name, const base::Value& dv);

  // Evaluates this category and return a base::Value with type list.
  base::Value Eval() const;

  std::vector<std::string> GetComponentNames() const;

 private:
  std::string category_name_;
  std::map<std::string, std::unique_ptr<ProbeStatement>> component_;

  FRIEND_TEST(ProbeConfigTest, LoadConfig);
};

}  // namespace runtime_probe

#endif  // RUNTIME_PROBE_COMPONENT_CATEGORY_H_
