MCPcopy Create free account
hub / github.com/coi/coi / generate_object_fields_parse

Function generate_object_fields_parse

src/codegen/json_codegen.cc:244–278  ·  view source on GitHub ↗

Generate inline parsing code for all fields of a data type

Source from the content-addressed store, hash-verified

242
243// Generate inline parsing code for all fields of a data type
244static void generate_object_fields_parse(std::stringstream& ss,
245 const std::string& data_type,
246 const std::string& result_var,
247 const std::string& meta_var,
248 const std::string& src_var,
249 const std::string& len_var,
250 const std::string& ok_var,
251 const std::string& indent,
252 int depth) {
253 auto* fields = DataTypeRegistry::instance().lookup(data_type);
254 if (!fields) return;
255
256 std::string fp = "_fp" + std::to_string(depth);
257
258 for (uint32_t i = 0; i < fields->size(); i++) {
259 const auto& field = (*fields)[i];
260 ss << indent << "if (uint32_t " << fp << " = __coi_json::find_key(" << src_var << ", " << len_var << ", \""
261 << field.name << "\", " << field.name.length() << ")) {\n";
262 ss << indent << " " << fp << " = __coi_json::skip_ws(" << src_var << ", " << fp << ", " << len_var << ");\n";
263
264 if (is_array_type(field.type)) {
265 generate_array_field_parse(ss, get_array_element_type(field.type), field.name, i,
266 result_var, meta_var, src_var, fp, len_var, indent + " ", depth);
267 } else if (!field.type.empty() && std::isupper(field.type[0]) &&
268 DataTypeRegistry::instance().lookup(field.type)) {
269 generate_nested_field_parse(ss, field.type, field.name, i,
270 result_var, meta_var, src_var, fp, len_var, indent + " ", depth);
271 } else {
272 generate_primitive_field_parse(ss, field.type, field.name, i,
273 result_var, meta_var, src_var, fp, len_var, ok_var, indent + " ");
274 }
275
276 ss << indent << "}\n";
277 }
278}
279
280// Generate JSON parse code for root-level arrays (e.g., Json.parse(User[], ...))
281static std::string generate_json_parse_array(

Callers 4

generate_json_parseFunction · 0.85

Calls 6

is_array_typeFunction · 0.85
get_array_element_typeFunction · 0.85
lookupMethod · 0.80

Tested by

no test coverage detected