Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
Mapping
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace PeServer\Core\Serialization;
6
7use Attribute;
8use PeServer\Core\Serialization\Converter\TypeConverterBase;
9use PeServer\Core\Text;
10
11/**
12 * マッピング設定。
13 *
14 * * ここに設定が集約される
15 * * `self::FLAG_IGNORE` が設定されていない限り処理される
16 */
17#[Attribute(Attribute::TARGET_PROPERTY)]
18readonly class Mapping
19{
20    #region define
21
22    /** 無視する。 */
23    public const FLAG_IGNORE = 0b11111111;
24    /** 通常。 */
25    public const FLAG_NONE = 0b00000000;
26    /** キーがない場合に例外を投げる(指定しない場合は無視される)。 */
27    public const FLAG_EXCEPTION_NOT_FOUND_KEY = 0b00000001;
28    /** 設定値の型が合わない場合に例外を投げる(指定しない場合は型変換を行い、それでも無理なら無視されるが `settype` がクッソ頑張ってる)。 */
29    public const FLAG_EXCEPTION_TYPE_MISMATCH = 0b00000010;
30    /** オブジェクトの場合に生成しない(指定しない場合は `null` だったら生成する)。 */
31    public const FLAG_OBJECT_INSTANCE_ONLY = 0b00000100;
32    /** 配列内オブジェクトを生成する際にキーを無視するか */
33    public const FLAG_LIST_ARRAY_VALUES = 0b00001000;
34
35    #endregion
36
37    /**
38     * 生成。
39     *
40     * 名前付き引数で呼び出すが吉。
41     *
42     * @param string $name 対象キー名。未設定の場合はプロパティ名から判定する。
43     * @param int $flags 各種設定。
44     * @phpstan-param int-mask-of<self::FLAG_*> $flags 各種設定。
45     * @param string $arrayValueClassName マッピング先が配列の場合に割り当てるオブジェクト。指定がない場合はただの配列となる。
46     * @phpstan-param class-string|Text::EMPTY $arrayValueClassName
47     * @param string $converter オブジェクト変換処理用の変換クラス名。
48     * @phpstan-param class-string<TypeConverterBase<class-string>>|string $converter
49     */
50    public function __construct(
51        public string $name = Text::EMPTY,
52        public int $flags = self::FLAG_NONE,
53        public string $arrayValueClassName = Text::EMPTY,
54        public string $converter = Text::EMPTY,
55    ) {
56    }
57}