Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions src/Address.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,20 @@
use SmartEmailing\Types\Comparable\ComparableInterface;
use SmartEmailing\Types\ExtractableTraits\ArrayExtractableTrait;

final class Address implements ToArrayInterface, ComparableInterface
final class Address implements ToArrayInterface, ComparableInterface, \JsonSerializable
{

use ArrayExtractableTrait;
use ArrayComparableTrait;
use ToArrayJsonSerializableTrait;

private string $streetAndNumber;
private readonly string $streetAndNumber;

private string $town;
private readonly string $town;

private ZipCode $zipCode;
private readonly ZipCode $zipCode;

private CountryCode $country;
private readonly CountryCode $country;

/**
* @param array<mixed> $data
Expand Down
5 changes: 3 additions & 2 deletions src/Base64String.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,16 @@
use SmartEmailing\Types\Comparable\StringComparableTrait;
use SmartEmailing\Types\ExtractableTraits\StringExtractableTrait;

final class Base64String implements ToStringInterface, ComparableInterface
final class Base64String implements ToStringInterface, ComparableInterface, \JsonSerializable
{

use StringExtractableTrait;
use ToStringTrait;
use StringComparableTrait;
use GetValueJsonSerializableTrait;

private function __construct(
private string $value
private readonly string $value
)
{
if (!$this->isValid($value)) {
Expand Down
5 changes: 3 additions & 2 deletions src/CompanyRegistrationNumber.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@
use SmartEmailing\Types\Comparable\StringComparableTrait;
use SmartEmailing\Types\ExtractableTraits\StringExtractableTrait;

final class CompanyRegistrationNumber implements ToStringInterface, ComparableInterface
final class CompanyRegistrationNumber implements ToStringInterface, ComparableInterface, \JsonSerializable
{

use StringExtractableTrait;
use ToStringTrait;
use StringComparableTrait;
use GetValueJsonSerializableTrait;

private string $value;
private readonly string $value;

private function __construct(
string $value
Expand Down
9 changes: 5 additions & 4 deletions src/ContentType.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,19 @@
use SmartEmailing\Types\Comparable\StringComparableTrait;
use SmartEmailing\Types\ExtractableTraits\StringExtractableTrait;

final class ContentType implements ToStringInterface, ComparableInterface
final class ContentType implements ToStringInterface, ComparableInterface, \JsonSerializable
{

use StringExtractableTrait;
use ToStringTrait;
use StringComparableTrait;
use GetValueJsonSerializableTrait;

private string $value;
private readonly string $value;

private string $type;
private readonly string $type;

private string $subType;
private readonly string $subType;

private function __construct(
string $value
Expand Down
2 changes: 1 addition & 1 deletion src/CountryCode.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
*
* @see https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
*/
final class CountryCode extends Enum implements ToStringInterface
final class CountryCode extends Enum implements ToStringInterface, \JsonSerializable
{

use EnumExtractableTrait;
Expand Down
3 changes: 2 additions & 1 deletion src/CurrencyCode.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@
/**
* ISO-4217 three-letter ("Alpha-3")
*/
final class CurrencyCode extends Enum implements ToStringInterface
final class CurrencyCode extends Enum implements ToStringInterface, \JsonSerializable
{

use EnumExtractableTrait;
use ToStringTrait;
use GetValueJsonSerializableTrait;

public const CZK = 'CZK';

Expand Down
9 changes: 5 additions & 4 deletions src/DateTimeRange.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,18 @@
use SmartEmailing\Types\Comparable\ComparableInterface;
use SmartEmailing\Types\ExtractableTraits\ArrayExtractableTrait;

final class DateTimeRange implements ToArrayInterface, ComparableInterface
final class DateTimeRange implements ToArrayInterface, ComparableInterface, \JsonSerializable
{

use ArrayExtractableTrait;
use ArrayComparableTrait;
use ToArrayJsonSerializableTrait;

private \DateTimeImmutable $from;
private readonly \DateTimeImmutable $from;

private \DateTimeImmutable $to;
private readonly \DateTimeImmutable $to;

private int $durationInSeconds;
private readonly int $durationInSeconds;

/**
* @param array<mixed> $data
Expand Down
5 changes: 3 additions & 2 deletions src/Domain.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ final class Domain implements ToStringInterface
use StringExtractableTrait;
use ToStringTrait;

private string $value;
private readonly string $value;

private function __construct(
string $value
Expand Down Expand Up @@ -56,7 +56,8 @@ public function getSecondLevelDomain(): Domain

private function isValid(
string $value
): bool {
): bool
{
return \preg_match('/^([a-z\\d](-*[a-z\\d])*)(\\.([a-z\\d](-*[a-z\\d])*))*$/i', $value) //valid chars check
&& \preg_match('/^.{1,253}$/', $value)// overall length check
&& \preg_match('/^[^\\.]{1,63}(\\.[^\\.]{1,63})*$/', $value);
Expand Down
9 changes: 5 additions & 4 deletions src/Duration.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,18 @@
use SmartEmailing\Types\Comparable\ComparableInterface;
use SmartEmailing\Types\ExtractableTraits\ExtractableTrait;

final class Duration implements ToStringInterface, ToArrayInterface, ComparableInterface
final class Duration implements ToStringInterface, ToArrayInterface, ComparableInterface, \JsonSerializable
{

use ExtractableTrait;
use ArrayComparableTrait;
use ToArrayJsonSerializableTrait;

private int $value;
private readonly int $value;

private TimeUnit $unit;
private readonly TimeUnit $unit;

private int $lengthInSeconds;
private readonly int $lengthInSeconds;

/**
* @param array<mixed> $data
Expand Down
10 changes: 3 additions & 7 deletions src/Enum.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,10 @@
use ReflectionClass;
use ReflectionClassConstant;

abstract class Enum
abstract class Enum implements \JsonSerializable, ToStringInterface
{

/**
* @var mixed
*/
private $value;
use ToStringTrait;

/**
* @var array<static> indexed by enum and value
Expand All @@ -27,11 +24,10 @@ abstract class Enum
private static array $availableValues = [];

final private function __construct(
mixed $value
private mixed $value
)
{
static::checkValue($value);
$this->value = $value;
}

/**
Expand Down
15 changes: 15 additions & 0 deletions src/GetValueJsonSerializableTrait.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

declare(strict_types = 1);

namespace SmartEmailing\Types;

trait GetValueJsonSerializableTrait
{

public function jsonSerialize(): mixed
{
return $this->getValue();
}

}
10 changes: 6 additions & 4 deletions src/Hex32.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,19 @@
use SmartEmailing\Types\Comparable\StringComparableTrait;
use SmartEmailing\Types\ExtractableTraits\StringExtractableTrait;

final class Hex32 implements ToStringInterface, ComparableInterface
final class Hex32 implements ToStringInterface, ComparableInterface, \JsonSerializable
{

use StringExtractableTrait;
use ToStringTrait;
use StringComparableTrait;

private string $value;
private readonly string $value;

private function __construct(
string $value
) {
)
{
if (!$this->isValid($value)) {
throw new InvalidTypeException('Invalid hex string: ' . $value);
}
Expand All @@ -30,7 +31,8 @@ private function __construct(

public static function fromGuid(
Guid $guid
): Hex32 {
): Hex32
{
return self::from(
Strings::replace($guid->getValue(), '/-/', '')
);
Expand Down
7 changes: 4 additions & 3 deletions src/HostName.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@
use SmartEmailing\Types\Comparable\StringComparableTrait;
use SmartEmailing\Types\ExtractableTraits\StringExtractableTrait;

final class HostName implements ToStringInterface, ComparableInterface
final class HostName implements ToStringInterface, ComparableInterface, \JsonSerializable
{

use StringExtractableTrait;
use ToStringTrait;
use StringComparableTrait;

private string $value;
private readonly string $value;

private function __construct(
string $value
Expand Down Expand Up @@ -53,7 +53,8 @@ public function getSecondLevelDomain(): HostName

private function isValid(
string $value
): bool {
): bool
{
return \preg_match('/^([a-z\\d](-*[a-z\\d])*)(\\.([a-z\\d](-*[a-z\\d])*))*$/i', $value) //valid chars check
&& \preg_match('/^.{1,253}$/', $value)// overall length check
&& \preg_match('/^[^\\.]{1,63}(\\.[^\\.]{1,63})*$/', $value);
Expand Down
1 change: 0 additions & 1 deletion src/HttpMethod.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ final class HttpMethod extends Enum implements ToStringInterface, ComparableInte
{

use EnumExtractableTrait;
use ToStringTrait;
use StringComparableTrait;

public const GET = 'GET';
Expand Down
6 changes: 3 additions & 3 deletions src/Iban.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
use SmartEmailing\Types\Comparable\StringComparableTrait;
use SmartEmailing\Types\ExtractableTraits\StringExtractableTrait;

final class Iban implements ToStringInterface, ComparableInterface
final class Iban implements ToStringInterface, ComparableInterface, \JsonSerializable
{

use StringExtractableTrait;
Expand All @@ -18,10 +18,10 @@ final class Iban implements ToStringInterface, ComparableInterface
public const FORMAT_ELECTRONIC = 'electronic';
public const FORMAT_PRINT = 'print';

private \Iban\Validation\Iban $iban;
private readonly \Iban\Validation\Iban $iban;

public function __construct(
private string $value
private readonly string $value
)
{
if (!\class_exists(\Iban\Validation\Iban::class) || !\class_exists(\Iban\Validation\Validator::class)) {
Expand Down
36 changes: 20 additions & 16 deletions src/IpAddress.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,25 @@
use SmartEmailing\Types\Comparable\StringComparableTrait;
use SmartEmailing\Types\ExtractableTraits\StringExtractableTrait;

final class IpAddress implements ToStringInterface, ComparableInterface
final class IpAddress implements ToStringInterface, ComparableInterface, \JsonSerializable
{

use StringExtractableTrait;
use ToStringTrait;
use StringComparableTrait;

private string $value;
private readonly string $value;

private int $version;
private readonly int $version;

private function __construct(
string $value
) {
$this->initialize($value);
)
{
[
$this->value,
$this->version,
] = $this->initialize($value);
}

public function getValue(): string
Expand All @@ -38,7 +42,8 @@ public function getVersion(): int

private function isValidIpV4(
string $value
): bool {
): bool
{
return (bool) \preg_match(
'~^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$~',
$value
Expand All @@ -47,16 +52,21 @@ private function isValidIpV4(

private function isValidIpV6(
string $value
): bool {
): bool
{
return (bool) \preg_match(
'~^(((?=(?>.*?(::))(?!.+\3)))\3?|([\dA-F]{1,4}(\3|:(?!$)|$)|\2))(?4){5}((?4){2}|((2[0-4]|1\d|[1-9])?\d|25[0-5])(\.(?7)){3})\z~i',
$value
);
}

/**
* @return array{string, int}
*/
private function initialize(
string $value
): bool {
): array
{
$value = Strings::trim($value);
$value = Strings::lower($value);
$value = \strtr(
Expand All @@ -68,17 +78,11 @@ private function initialize(
);

if ($this->isValidIpV4($value)) {
$this->value = $value;
$this->version = 4;

return true;
return [$value, 4];
}

if ($this->isValidIpV6($value)) {
$this->value = $value;
$this->version = 6;

return true;
return [$value, 6];
}

throw new InvalidTypeException('Invalid IP address: ' . $value);
Expand Down
Loading