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

use nur\sery\wip\schema\_assoc\AssocResult;
use nur\sery\wip\schema\_list\ListResult;
use nur\sery\wip\schema\_scalar\ScalarResult;

/**
 * Class Result: résultat de l'analyse ou de la normalisation d'une valeur
 */
abstract class Result {
  function __construct() {
    $this->reset();
  }

  function isAssoc(?AssocResult &$assoc=null): bool { return false; }
  function isList(?ListResult &$list=null): bool { return false; }
  function isScalar(?ScalarResult &$scalar=null): bool { return false; }

  /**
   * Obtenir la liste des clés valides pour les valeurs accessibles via cet
   * objet
   */
  abstract function getKeys(): array;

  /** obtenir un objet pour gérer la valeur spécifiée */
  abstract function getResult($key=null): Result;

  abstract function reset(): void;
}