/**
  * @param $id
  * @param Country $country
  * @param $zoneType
  * @param $ref
  * @param $refOfficial
  * @param $name
  * @param $slug
  * @param $population
  * @param $wikipedia
  * @param \DateTime|null $dateFrom
  * @param \DateTime|null $dateUntil
  * @param $shapePolygon
  * @param $shapeMultiPolygon
  *
  * @return Zone
  */
 public function hydrateZone($id, Country $country, $zoneType, $ref, $refOfficial, $name, $slug, $population, $wikipedia, \DateTime $dateFrom = null, \DateTime $dateUntil = null, $shapePolygon, $shapeMultiPolygon) : Zone
 {
     if ($cache = $this->getFromCache('Zone', $id)) {
         return $cache;
     } else {
         $zone = new Zone();
         return $this->putInCache('Zone', $id, $zone->setId($id)->setCountry($country)->setType($zoneType)->setRef($ref)->setRefOfficial($refOfficial)->setName($name)->setSlug($slug)->setPopulation($population)->setWikipedia($wikipedia)->setDateFrom($dateFrom)->setDateUntil($dateUntil)->setShapePolygon($shapePolygon)->setShapePolygon($shapeMultiPolygon));
     }
 }
 /**
  * ZoneResult constructor.
  */
 public function __construct(Zone $zone, $distance)
 {
     parent::__construct();
     $this->distance = $distance;
     $this->setId($zone->getId())->setCountry($zone->getCountry())->setType($zone->getType())->setRef($zone->getRef())->setRefOfficial($zone->getRefOfficial())->setName($zone->getName())->setSlug($zone->getSlug())->setPopulation($zone->getPopulation())->setWikipedia($zone->getWikipedia())->setDateFrom($zone->getDateFrom())->setDateUntil($zone->getDateUntil())->setFeature($zone->getFeature());
 }
 /**
  * NoElectsForZoneException constructor.
  *
  * @param Zone   $zone
  * @param string $message
  */
 public function __construct(Zone $zone, $message = 'No elects found for %s')
 {
     parent::__construct(sprintf($message, $zone->getName()));
 }