File tree Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Original file line number Diff line number Diff line change @@ -59,13 +59,20 @@ class OICodeGen {
59
59
Config (Config&& other) = delete ;
60
60
Config& operator =(Config&& other) = delete ;
61
61
62
+ struct KeyToCapture {
63
+ std::optional<std::string> type;
64
+ std::optional<std::string> member;
65
+ bool topLevel = false ;
66
+ };
67
+
62
68
bool useDataSegment;
63
69
FeatureSet features;
64
70
std::set<std::filesystem::path> containerConfigPaths;
65
71
std::set<std::string> defaultHeaders;
66
72
std::set<std::string> defaultNamespaces;
67
73
std::vector<std::pair<std::string, std::string>> membersToStub;
68
74
std::vector<ContainerInfo> passThroughTypes;
75
+ std::vector<KeyToCapture> keysToCapture;
69
76
70
77
std::string toString () const ;
71
78
std::vector<std::string> toOptions () const ;
Original file line number Diff line number Diff line change @@ -170,6 +170,38 @@ std::optional<FeatureSet> processConfigFile(
170
170
}
171
171
}
172
172
}
173
+ if (toml::array* arr = (*codegen)[" capture_keys" ].as_array ()) {
174
+ for (auto && el : *arr) {
175
+ if (toml::table* captureKeys = el.as_table ()) {
176
+ auto * type = (*captureKeys)[" type" ].as_string ();
177
+ auto * topLevel = (*captureKeys)[" top_level" ].as_boolean ();
178
+ if (!((type == nullptr ) ^ (topLevel == nullptr ))) {
179
+ LOG (ERROR) << " Config entry 'capture_keys' must specify either a "
180
+ " type or 'top_level'" ;
181
+ return {};
182
+ }
183
+
184
+ if (type) {
185
+ auto * members = (*captureKeys)[" members" ].as_array ();
186
+ if (!members) {
187
+ generatorConfig.keysToCapture .push_back (
188
+ OICodeGen::Config::KeyToCapture{type->value_or (" " ), " *" ,
189
+ false });
190
+ } else {
191
+ for (auto && member : *members) {
192
+ generatorConfig.keysToCapture .push_back (
193
+ OICodeGen::Config::KeyToCapture{
194
+ type->value_or (" " ), member.value_or (" " ), false });
195
+ }
196
+ }
197
+ } else if (topLevel) {
198
+ generatorConfig.keysToCapture .push_back (
199
+ OICodeGen::Config::KeyToCapture{std::nullopt , std::nullopt ,
200
+ true });
201
+ }
202
+ }
203
+ }
204
+ }
173
205
}
174
206
175
207
FeatureSet enabledFeatures;
You can’t perform that action at this time.
0 commit comments