code: public function createService(ServiceLocatorInterface $serviceLocator)
      {
          $services = $serviceLocator->getServiceLocator();
          /* @var $options InputFilterOptionsInterface */
          $options = $services->get(ModuleOptions::class);
          /* @var $userMapper \CmsUser\Persistence\UserMapperInterface */
          $userMapper = $services->get('MapperManager')->get($options->getUserEntityClass());
  
          $identity = null;
          if ($services->has($options->getAuthenticationService())) {
              /* @var $authService \Zend\Authentication\AuthenticationServiceInterface */
              $authService = $services->get($options->getAuthenticationService());
          
              if ($authService->hasIdentity()) {
                  /* @var $identity \CmsUser\Mapping\UserInterface */
                  $identity = $authService->getIdentity();
              }
          }
  
          return $serviceLocator->get('Callback', [
              'messages' => [
                  Callback::INVALID_VALUE => 'An user with this email already exists',
              ],
              'callback' => function ($value) use ($userMapper, $identity)
              {
                  if ($identity) {
                      $filter = new StringToLower(['encoding' => 'UTF-8']);
                      if ($filter->filter($identity->getEmail()) === $filter->filter($value)) {
                          return true;
                      }
                  }
  
                  return !$userMapper->findOneByEmail($value);
              },
              'break_chain_on_failure' => true,
          ]);
      }
docs: {@inheritDoc}
  
  @return ValidatorInterface