/**
  * @param array[] $value
  * @param PropRule $propRule
  * @param DataTransformer $transformer
  * @return mixed[]
  *
  * @throws ParseException
  */
 public function toModel(array $value, PropRule $propRule, DataTransformer $transformer)
 {
     $type = $propRule->getKey('rel')['map'];
     $emptyModel = $transformer->createModel($propRule->getKey('rel')['model']);
     $models = [];
     foreach ($value as $one) {
         $model = clone $emptyModel;
         $transformer->fillModel($one, $model, $type);
         $models[] = $model;
     }
     return $models;
 }
 /**
  * @param mixed $model
  * @param string $mapType
  * @return array
  *
  * @throws ParseException
  */
 public function getData($model, $mapType = 'dto')
 {
     $class = get_class($model);
     $map = $this->mapsManager->getMap($class, $mapType);
     $fromModelFn = $this->fn->getFromModel();
     $props = [];
     foreach ($map as $dataKey => $propRule) {
         $propRule = new PropRule($propRule);
         $val = $fromModelFn->call($model, $propRule->getGetter(), $propRule->getProp($dataKey));
         if ($val !== null) {
             $props[$dataKey] = $this->getConverter()->toData($val, $propRule, $this);
         }
     }
     return $props;
 }
 /**
  * @param PropRule $propRule
  * @return array
  */
 protected function getType(PropRule $propRule) : array
 {
     $isCollection = $propRule->getKey('coll', false);
     $type = $this->types[$propRule->getType()];
     return [$type, $isCollection];
 }