Skip to content
Merged
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
2 changes: 1 addition & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
${{ runner.os }}-php-

- name: Install dependencies
run: composer install --prefer-dist --no-progress --no-suggest
run: composer install --prefer-dist --no-progress

- name: Run test suite
run: composer tests
106 changes: 51 additions & 55 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 18 additions & 4 deletions src/ArrayObjectMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@
use Tcds\Io\Jackson\Node\Mappers\Writers\DateTimeWriter;
use Tcds\Io\Jackson\Node\Reader;
use Tcds\Io\Jackson\Node\Runtime\RuntimeReader;
use Tcds\Io\Jackson\Node\Runtime\RuntimeTypeNodeFactory;
use Tcds\Io\Jackson\Node\Runtime\RuntimeTypeNodeSpecificationFactory;
use Tcds\Io\Jackson\Node\Runtime\RuntimeWriter;
use Tcds\Io\Jackson\Node\StaticReader;
use Tcds\Io\Jackson\Node\StaticWriter;
use Tcds\Io\Jackson\Node\TypeNode;
use Tcds\Io\Jackson\Node\TypeNodeFactory;
use Tcds\Io\Jackson\Node\Writer;
use Throwable;

Expand All @@ -25,19 +28,30 @@
*/
readonly class ArrayObjectMapper implements ObjectMapper
{
/** @var Reader<mixed> */
private Reader $defaultTypeReader;
/** @var Writer<mixed> */
private Writer $defaultTypeWriter;
/** @var TypeMappers */
private array $typeMappers;

/**
* @param Reader<mixed> $defaultTypeReader
* @param Writer<mixed> $defaultTypeWriter
* @param Reader<mixed>|null $defaultTypeReader
* @param Writer<mixed>|null $defaultTypeWriter
* @param TypeMappers $typeMappers
*/
public function __construct(
private Reader $defaultTypeReader = new RuntimeReader(),
private Writer $defaultTypeWriter = new RuntimeWriter(),
?Reader $defaultTypeReader = null,
?Writer $defaultTypeWriter = null,
array $typeMappers = [],
TypeNodeFactory $typeNodeFactory = new RuntimeTypeNodeFactory(),
) {
$this->defaultTypeReader = $defaultTypeReader ?? new RuntimeReader(
node: $typeNodeFactory,
specification: new RuntimeTypeNodeSpecificationFactory(factory: $typeNodeFactory),
);
$this->defaultTypeWriter = $defaultTypeWriter ?? new RuntimeWriter(node: $typeNodeFactory);

$dateTimeMapper = ['reader' => new DateTimeReader(), 'writer' => new DateTimeWriter()];

$this->typeMappers = [
Expand Down
15 changes: 8 additions & 7 deletions src/JsonObjectMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
use Override;
use Tcds\Io\Jackson\Node\Json;
use Tcds\Io\Jackson\Node\Reader;
use Tcds\Io\Jackson\Node\Runtime\RuntimeReader;
use Tcds\Io\Jackson\Node\Runtime\RuntimeWriter;
use Tcds\Io\Jackson\Node\Runtime\RuntimeTypeNodeFactory;
use Tcds\Io\Jackson\Node\TypeNodeFactory;
use Tcds\Io\Jackson\Node\Writer;

/**
Expand All @@ -17,16 +17,17 @@
private ArrayObjectMapper $mapper;

/**
* @param Reader<mixed> $defaultTypeReader
* @param Writer<mixed> $defaultTypeWriter
* @param Reader<mixed>|null $defaultTypeReader
* @param Writer<mixed>|null $defaultTypeWriter
* @param TypeMappers $typeMappers
*/
public function __construct(
Reader $defaultTypeReader = new RuntimeReader(),
Writer $defaultTypeWriter = new RuntimeWriter(),
?Reader $defaultTypeReader = null,
?Writer $defaultTypeWriter = null,
array $typeMappers = [],
TypeNodeFactory $typeNodeFactory = new RuntimeTypeNodeFactory(),
) {
$this->mapper = new ArrayObjectMapper($defaultTypeReader, $defaultTypeWriter, $typeMappers);
$this->mapper = new ArrayObjectMapper($defaultTypeReader, $defaultTypeWriter, $typeMappers, $typeNodeFactory);
}

#[Override] public function readValueWith(string $type, mixed $value, array $with = [])
Expand Down
11 changes: 10 additions & 1 deletion src/Node/InputNode.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,16 @@

readonly class InputNode
{
public function __construct(public string $name, public string $type, public mixed $default)
public function __construct(
public string $name,
public string $type,
public mixed $default,
public ?string $key = null,
) {
}

public function key(): string
{
return $this->key ?? $this->name;
}
}
15 changes: 15 additions & 0 deletions src/Node/JsonProperty.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

declare(strict_types=1);

namespace Tcds\Io\Jackson\Node;

use Attribute;

#[Attribute(Attribute::TARGET_PARAMETER | Attribute::TARGET_PROPERTY)]
final readonly class JsonProperty
{
public function __construct(public string $name)
{
}
}
Loading
Loading