/**
  * {@inheritdoc}
  * @SuppressWarnings(PHPMD.NPathComplexity)
  */
 public function processOptions(CartItemInterface $cartItem)
 {
     if ($cartItem->getProductType() !== \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE) {
         return $cartItem;
     }
     $productOptions = [];
     $bundleOptions = $cartItem->getBuyRequest()->getBundleOption();
     $bundleOptionsQty = $cartItem->getBuyRequest()->getBundleOptionQty();
     foreach ($bundleOptions as $optionId => $optionSelections) {
         if (empty($optionSelections)) {
             continue;
         }
         $optionSelections = is_array($optionSelections) ? $optionSelections : [$optionSelections];
         $optionQty = isset($bundleOptionsQty[$optionId]) ? $bundleOptionsQty[$optionId] : 1;
         /** @var \Magento\Bundle\Api\Data\BundleOptionInterface $productOption */
         $productOption = $this->bundleOptionFactory->create();
         $productOption->setOptionId($optionId);
         $productOption->setOptionSelections($optionSelections);
         $productOption->setOptionQty($optionQty);
         $productOptions[] = $productOption;
     }
     $extension = $this->productOptionExtensionFactory->create()->setBundleOptions($productOptions);
     if (!$cartItem->getProductOption()) {
         $cartItem->setProductOption($this->productOptionFactory->create());
     }
     $cartItem->getProductOption()->setExtensionAttributes($extension);
     return $cartItem;
 }
 /**
  * {@inheritdoc}
  */
 public function convertToProductOption(DataObject $request)
 {
     $bundleOptions = $request->getBundleOption();
     $bundleOptionsQty = $request->getBundleOptionQty();
     if (!empty($bundleOptions) && is_array($bundleOptions)) {
         $data = [];
         foreach ($bundleOptions as $optionId => $optionSelections) {
             if (empty($optionSelections)) {
                 continue;
             }
             $optionSelections = is_array($optionSelections) ? $optionSelections : [$optionSelections];
             $optionQty = isset($bundleOptionsQty[$optionId]) ? $bundleOptionsQty[$optionId] : 1;
             /** @var BundleOptionInterface $productOption */
             $productOption = $this->bundleOptionFactory->create();
             $productOption->setOptionId($optionId);
             $productOption->setOptionSelections($optionSelections);
             $productOption->setOptionQty($optionQty);
             $data[] = $productOption;
         }
         return ['bundle_options' => $data];
     }
     return [];
 }