72 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nur\sery;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class ValueException: indiquer qu'une valeur est invalide
 | 
						|
 */
 | 
						|
class ValueException extends UserException {
 | 
						|
  private static function value($value): string {
 | 
						|
    if (is_object($value)) {
 | 
						|
      return "<".get_class($value).">";
 | 
						|
    } elseif (is_array($value)) {
 | 
						|
      $values = $value;
 | 
						|
      $parts = [];
 | 
						|
      $index = 0;
 | 
						|
      foreach ($values as $key => $value) {
 | 
						|
        if ($key === $index) {
 | 
						|
          $index++;
 | 
						|
          $parts[] = self::value($value);
 | 
						|
        } else {
 | 
						|
          $parts[] = "$key=>".self::value($value);
 | 
						|
        }
 | 
						|
      }
 | 
						|
      return "[" . implode(", ", $parts) . "]";
 | 
						|
    } elseif (is_string($value)) {
 | 
						|
      return $value;
 | 
						|
    } else {
 | 
						|
      return var_export($value, true);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  private static function message($value, ?string $message, ?string $kind, ?string $prefix, ?string $suffix): string {
 | 
						|
    if ($kind === null) $kind = "value";
 | 
						|
    if ($message === null) $message = "$kind$suffix";
 | 
						|
    if ($value !== null) {
 | 
						|
      $value = self::value($value);
 | 
						|
      if ($prefix) $prefix = "$prefix: $value";
 | 
						|
      else $prefix = $value;
 | 
						|
    }
 | 
						|
    if ($prefix) $prefix = "$prefix: ";
 | 
						|
    return $prefix.$message;
 | 
						|
  }
 | 
						|
 | 
						|
  static final function null(?string $kind=null, ?string $prefix=null, ?string $message=null): self {
 | 
						|
    return new static(self::message(null, $message, $kind, $prefix, " should not be null"));
 | 
						|
  }
 | 
						|
 | 
						|
  static final function invalid_kind($value=null, ?string $kind=null, ?string $prefix=null, ?string $message=null): self {
 | 
						|
    return new static(self::message($value, $message, $kind, $prefix, " is invalid"));
 | 
						|
  }
 | 
						|
 | 
						|
  static final function invalid_key($value, ?string $prefix=null, ?string $message=null): self {
 | 
						|
    return self::invalid_kind($value, "key", $prefix, $message);
 | 
						|
  }
 | 
						|
 | 
						|
  static final function invalid_value($value, ?string $prefix=null, ?string $message=null): self {
 | 
						|
    return self::invalid_kind($value, "value", $prefix, $message);
 | 
						|
  }
 | 
						|
 | 
						|
  static final function invalid_type($value, string $expected_type): self {
 | 
						|
    return new static(self::message($value, null, "type", null, " is invalid, expected $expected_type"));
 | 
						|
  }
 | 
						|
 | 
						|
  static final function invalid_class($class, string $expected_class): self {
 | 
						|
    if (is_object($class)) $class = get_class($class);
 | 
						|
    return new static(self::message($class, null, "class", null, " is invalid, expected $expected_class"));
 | 
						|
  }
 | 
						|
 | 
						|
  static final function forbidden($value=null, ?string $kind=null, ?string $prefix=null, ?string $message=null): self {
 | 
						|
    return new static(self::message($value, $message, $kind, $prefix, " is forbidden"));
 | 
						|
  }
 | 
						|
}
 |