/**
  * Process cart item product options
  *
  * @param CartItemInterface $cartItem
  * @return CartItemInterface
  */
 public function processOptions(CartItemInterface $cartItem)
 {
     $downloadableLinkIds = [];
     $option = $cartItem->getOptionByCode('downloadable_link_ids');
     if (!empty($option)) {
         $downloadableLinkIds = explode(',', $option->getValue());
     }
     $downloadableOption = $this->downloadableOptionFactory->create();
     $this->dataObjectHelper->populateWithArray($downloadableOption, ['downloadable_links' => $downloadableLinkIds], 'Magento\\Downloadable\\Api\\Data\\DownloadableOptionInterface');
     $productOption = $cartItem->getProductOption() ? $cartItem->getProductOption() : $this->productOptionFactory->create();
     $extensibleAttribute = $productOption->getExtensionAttributes() ? $productOption->getExtensionAttributes() : $this->extensionFactory->create();
     $extensibleAttribute->setDownloadableOption($downloadableOption);
     $productOption->setExtensionAttributes($extensibleAttribute);
     $cartItem->setProductOption($productOption);
     return $cartItem;
 }
 /**
  * Receive custom option from buy request
  *
  * @param CartItemInterface $cartItem
  * @return array
  */
 protected function getOptions(CartItemInterface $cartItem)
 {
     $buyRequest = !empty($cartItem->getOptionByCode('info_buyRequest')) ? unserialize($cartItem->getOptionByCode('info_buyRequest')->getValue()) : null;
     return is_array($buyRequest) && isset($buyRequest['options']) ? $buyRequest['options'] : [];
 }