1353952Sdim//===-- OptionGroupPythonClassWithDict.h -------------------------------------*- C++ -*-===//
2353952Sdim//
3353952Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353952Sdim// See https://llvm.org/LICENSE.txt for license information.
5353952Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6353952Sdim//
7353952Sdim//===----------------------------------------------------------------------===//
8353952Sdim
9353952Sdim#ifndef liblldb_OptionGroupPythonClassWithDict_h_
10353952Sdim#define liblldb_OptionGroupPythonClassWithDict_h_
11353952Sdim
12353952Sdim#include "lldb/lldb-types.h"
13353952Sdim#include "lldb/Interpreter/Options.h"
14353952Sdim#include "lldb/Utility/StructuredData.h"
15353952Sdim
16353952Sdimnamespace lldb_private {
17353952Sdim
18353952Sdim// Use this Option group if you have a python class that implements some
19353952Sdim// Python extension point, and you pass a SBStructuredData to the class
20353952Sdim// __init__ method.
21353952Sdim// class_option specifies the class name
22353952Sdim// the key and value options are read in in pairs, and a
23353952Sdim// StructuredData::Dictionary is constructed with those pairs.
24353952Sdimclass OptionGroupPythonClassWithDict : public OptionGroup {
25353952Sdimpublic:
26353952Sdim  OptionGroupPythonClassWithDict(const char *class_use,
27357095Sdim                                 bool is_class = true,
28357095Sdim                                 int class_option = 'C',
29357095Sdim                                 int key_option = 'k',
30357095Sdim                                 int value_option = 'v');
31353952Sdim
32353952Sdim  ~OptionGroupPythonClassWithDict() override;
33353952Sdim
34353952Sdim  llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
35353952Sdim    return llvm::ArrayRef<OptionDefinition>(m_option_definition);
36353952Sdim  }
37353952Sdim
38353952Sdim  Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
39353952Sdim                        ExecutionContext *execution_context) override;
40353952Sdim  Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete;
41353952Sdim
42353952Sdim  void OptionParsingStarting(ExecutionContext *execution_context) override;
43353952Sdim  Status OptionParsingFinished(ExecutionContext *execution_context) override;
44353952Sdim
45353952Sdim  const StructuredData::DictionarySP GetStructuredData() {
46353952Sdim    return m_dict_sp;
47353952Sdim  }
48357095Sdim  const std::string &GetName() {
49357095Sdim    return m_name;
50353952Sdim  }
51353952Sdim
52353952Sdimprotected:
53357095Sdim  std::string m_name;
54353952Sdim  std::string m_current_key;
55353952Sdim  StructuredData::DictionarySP m_dict_sp;
56353952Sdim  std::string m_class_usage_text, m_key_usage_text, m_value_usage_text;
57357095Sdim  bool m_is_class;
58357095Sdim  OptionDefinition m_option_definition[4];
59353952Sdim};
60353952Sdim
61353952Sdim} // namespace lldb_private
62353952Sdim
63353952Sdim#endif // liblldb_OptionGroupPythonClassWithDict_h_
64