in mysqlx-connector-python/src/mysqlxpb/mysqlxpb.cc [278:395]
static void ConvertPyToPbRequired(
google::protobuf::Message& message,
const google::protobuf::FieldDescriptor& field,
google::protobuf::DynamicMessageFactory& factory,
PyObject* obj) {
switch (field.type()) {
case google::protobuf::FieldDescriptor::TYPE_DOUBLE: {
message.GetReflection()->SetDouble(&message, &field,
python_cast<double>(obj));
return;
}
case google::protobuf::FieldDescriptor::TYPE_FLOAT: {
message.GetReflection()->SetFloat(&message, &field,
python_cast<float>(obj));
return;
}
case google::protobuf::FieldDescriptor::TYPE_INT64: {
message.GetReflection()->SetInt64(&message, &field,
python_cast<google::protobuf::int64>(obj));
return;
}
case google::protobuf::FieldDescriptor::TYPE_UINT64: {
message.GetReflection()->SetUInt64(&message, &field,
python_cast<google::protobuf::uint64>(obj));
return;
}
case google::protobuf::FieldDescriptor::TYPE_INT32: {
message.GetReflection()->SetInt32(&message, &field,
python_cast<google::protobuf::int32>(obj));
return;
}
case google::protobuf::FieldDescriptor::TYPE_FIXED64: {
message.GetReflection()->SetUInt64(&message, &field,
python_cast<google::protobuf::uint64>(obj));
return;
}
case google::protobuf::FieldDescriptor::TYPE_FIXED32: {
message.GetReflection()->SetUInt32(&message, &field,
python_cast<google::protobuf::uint32>(obj));
return;
}
case google::protobuf::FieldDescriptor::TYPE_BOOL: {
message.GetReflection()->SetBool(&message, &field,
python_cast<bool>(obj));
return;
}
case google::protobuf::FieldDescriptor::TYPE_STRING: {
message.GetReflection()->SetString(&message, &field,
python_cast<std::string>(obj));
return;
}
case google::protobuf::FieldDescriptor::TYPE_MESSAGE: {
if (!PyDict_CheckExact(obj))
throw std::invalid_argument("dict");
message.GetReflection()->SetAllocatedMessage(&message,
CreateMessage(obj, factory), &field);
return;
}
case google::protobuf::FieldDescriptor::TYPE_BYTES: {
message.GetReflection()->SetString(&message, &field,
python_cast<std::string>(obj));
return;
}
case google::protobuf::FieldDescriptor::TYPE_UINT32: {
message.GetReflection()->SetUInt32(&message, &field,
python_cast<google::protobuf::uint32>(obj));
return;
}
case google::protobuf::FieldDescriptor::TYPE_ENUM: {
message.GetReflection()->SetEnum(&message, &field,
field.enum_type()->FindValueByNumber(
python_cast<google::protobuf::int32>(obj)));
return;
}
case google::protobuf::FieldDescriptor::TYPE_SFIXED32: {
message.GetReflection()->SetInt32(&message, &field,
python_cast<google::protobuf::int32>(obj));
return;
}
case google::protobuf::FieldDescriptor::TYPE_SFIXED64: {
message.GetReflection()->SetInt64(&message, &field,
python_cast<google::protobuf::int64>(obj));
return;
}
case google::protobuf::FieldDescriptor::TYPE_SINT32: {
message.GetReflection()->SetInt32(&message, &field,
python_cast<google::protobuf::int32>(obj));
return;
}
case google::protobuf::FieldDescriptor::TYPE_SINT64: {
message.GetReflection()->SetInt64(&message, &field,
python_cast<google::protobuf::int64>(obj));
return;
}
// Tag-delimited message. Deprecated.
case google::protobuf::FieldDescriptor::TYPE_GROUP:
break;
}
throw std::runtime_error("Unknown Protobuf type.");
}