<?php
namespace nur\sery\wip\schema\types;

use nur\sery\wip\schema\input\Input;
use nur\sery\wip\schema\Result;
use nur\sery\wip\schema\Schema;

/**
 * Interface IType: un type de données
 */
interface IType {
  /** la donnée $input($destKey) est-elle disponible? */
  function isAvailable(Input $input, $destKey): bool;

  /** la valeur $value est-elle nulle? */
  function isNull($value): bool;

  /** la valeur $value est-elle valide et normalisée le cas échéant? */
  function isValid($value, ?bool &$normalized=null): bool;

  /**
   * analyser, corriger éventuellement et normaliser la valeur
   *
   * si la valeur était déjà normalisée, ou si une erreur s'est produite,
   * retourner false.
   */
  function verifix(&$value, Result &$result, Schema $schema): bool;

  /**
   * formatter la valeur pour affichage. $value est garanti d'être du bon type
   */
  function format($value, $format=null): string;
}
