diff --git a/src/codegen_json_bson/__init__.py b/src/codegen_json_bson/__init__.py index 75dabd892ebe369d1d55bd7b0411bb785de0c8a4..8a6ce62bb2020fa3b3b925a2ef6c13d4e6c9ff0f 100644 --- a/src/codegen_json_bson/__init__.py +++ b/src/codegen_json_bson/__init__.py @@ -437,7 +437,9 @@ def field_assignment_get_json_value(field, ty, fieldtype, name): if ty == "bytes": res = "" res += f'// {ty} {field} {fieldtype} {name}\n' - if name == "CVLImage" or name == "CompressedImage": + if name == "CompressedImage": + res += f' res["{field}"] = macaron::Base64::Encode(msg.{field});\n' + if name == "CVLImage": res += " Json::Value binobj;\n" res += f' binobj["__bin__"] = macaron::Base64::Encode(msg.{field});\n' res += f' res["{field}"] = binobj;' @@ -471,7 +473,7 @@ def field_assignment_parse_json_value(field, ty, fieldtype, name): return f'msg.{field} = ros::Duration(m["{field}"].asDouble());' if ty == "bytes": res = f'// {ty} {field} - {fieldtype} - {name}\n' - if name == "CVLImage" or name == "CompressedImage": + if name == "CVLImage": res += " std::string out;\n" res += f' std::string res = macaron::Base64::Decode(m["{field}"]["__bin__"].asString(), out);\n' res += " if (res != \"\") {\n" @@ -481,6 +483,16 @@ def field_assignment_parse_json_value(field, ty, fieldtype, name): res += " for (unsigned int i=0; i<out.size(); i++) {\n" res += f' msg.{field}.push_back(out[i]);\n' res += " }" + if name == "CompressedImage": + res += " std::string out;\n" + res += f' std::string res = macaron::Base64::Decode(m["{field}"].asString(), out);\n' + res += " if (res != \"\") {\n" + res += " ROS_ERROR(\"FAILED TO DECODE CVL IMAGE Base64 Data: %s\", res.c_str());\n" + res += " return false;\n" + res += " }\n" + res += " for (unsigned int i=0; i<out.size(); i++) {\n" + res += f' msg.{field}.push_back(out[i]);\n' + res += " }" return res listprefix = "" gen_for_list = True