public function transform($data)
    {
        $address = new ShipmentAddress();

        if (!is_array($data) || empty($data)) {
            return $address;
        }

        foreach ($this->fields as $field) {
            if (isset($data[$field])) {
                $value = $data[$field];

                if ($field === 'country') {
                    if (0 >= $value) {
                        throw new InvalidArgumentException("Invalid country id.");
                    }
                    $value = $this->countryRepository->find($value);
                    if (null === $value) {
                        throw new InvalidArgumentException("Country not found.");
                    }
                } elseif ($field === 'phone' || $field === 'mobile') {
                    $value = unserialize($value);
                    if (!$value instanceof PhoneNumber) {
                        throw new InvalidArgumentException("Invalid phone number.");
                    }
                }

                $this->accessor->setValue($address, $field, $value);
            }
            // TODO Check required fields ?
        }

        return $address;
    }