/**
  * Check if date criteria is matched.
  *
  * @param string $key Date criteria key.
  * @param RateInterface $rate Rate to check for match.
  * @param array $criteria Filter criterias.
  * @return bool TRUE if there is a match.
  */
 private static function matchesDateCriteria($key, RateInterface $rate, array $criteria)
 {
     $date = self::extractDateCriteria($key, $criteria);
     if ($date === null) {
         return true;
     }
     if ($key === 'dateFrom') {
         return $date <= $rate->getDate();
     } elseif ($key === 'dateTo') {
         return $date >= $rate->getDate();
     }
     return $date->format('Y-m-d') === $rate->getDate()->format('Y-m-d');
 }
 /**
  * Build this rate instance from any RateInterface implementation.
  *
  * @param RateInterface $rate
  * @return Rate
  */
 public static function fromRateInterface(RateInterface $rate)
 {
     return new static($rate->getSourceName(), $rate->getValue(), $rate->getCurrencyCode(), $rate->getRateType(), $rate->getDate(), $rate->getBaseCurrencyCode(), $rate->getCreatedAt(), $rate->getModifiedAt());
 }
 /**
  * Serialize rate to JSON string.
  *
  * @param RateInterface $rate Rate to serialize.
  * @return string JSON representation of rate.
  */
 protected function toJson(RateInterface $rate)
 {
     return json_encode(array('sourceName' => $rate->getSourceName(), 'value' => $rate->getValue(), 'currencyCode' => $rate->getCurrencyCode(), 'rateType' => $rate->getRateType(), 'date' => $rate->getDate()->format('Y-m-d H:i:s'), 'baseCurrencyCode' => $rate->getBaseCurrencyCode(), 'createdAt' => $rate->getCreatedAt()->format('Y-m-d H:i:s'), 'modifiedAt' => $rate->getModifiedAt()->format('Y-m-d H:i:s')));
 }