static void ConvertPyToPbRequired()

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.");
}