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

use nur\sery\wip\schema\types\IType;
use nur\sery\wip\schema\types\Registry;
use nur\sery\wip\schema\types\tarray;
use nur\sery\wip\schema\types\tbool;
use nur\sery\wip\schema\types\tcallable;
use nur\sery\wip\schema\types\tfloat;
use nur\sery\wip\schema\types\tint;
use nur\sery\wip\schema\types\tstring;

/**
 * Class types: classe outil pour gérer le registre de types
 */
class types {
  /** @var Registry */
  private static $registry;

  static function registry(): Registry {
    if (self::$registry === null) {
      self::$registry = new Registry();
    }
    return self::$registry;
  }

  static function get(string $name): IType {
    return self::registry()->get($name);
  }

  static function string(): tstring { return self::get("string"); }
  static function bool(): tbool { return self::get("bool"); }
  static function int(): tint { return self::get("int"); }
  static function float(): tfloat { return self::get("float"); }
  static function array(): tarray { return self::get("array"); }
  static function callable(): tcallable { return self::get("callable"); }
}
