Skip to content

Commit ecb300a

Browse files
committed
add test and fix error on AvroSymbols
1 parent 5c3dedc commit ecb300a

File tree

8 files changed

+282
-220
lines changed

8 files changed

+282
-220
lines changed

src/Objects/Schema/Generation/Attributes/AvroItems.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ final class AvroItems implements TypeOnlyAttribute
1818

1919
public function __construct(Type|AvroType ...$types)
2020
{
21-
$this->types = array_map(function ($type) {
21+
$this->types = array_map(static function ($type) {
2222
if ($type instanceof AvroType) {
2323
return $type;
2424
}

src/Objects/Schema/Generation/Attributes/AvroSymbols.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@
1212
final class AvroSymbols implements VariadicAttribute
1313
{
1414
/**
15-
* @var array<string>
15+
* @var non-empty-array<int, string>
1616
*/
1717
private array $symbols;
1818

19-
public function __construct(callable $symbols)
19+
/**
20+
* @param non-empty-array<int, string> $symbols
21+
*/
22+
public function __construct(array $symbols)
2023
{
21-
$this->symbols = $symbols();
24+
$this->symbols = $symbols;
2225
}
2326

2427
public function name(): string

test/Objects/Schema/Generation/Fixture/ArraysWithComplexType.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,19 @@
55
namespace FlixTech\AvroSerializer\Test\Objects\Schema\Generation\Fixture;
66

77
use FlixTech\AvroSerializer\Objects\Schema\Generation\Annotations as SerDe;
8+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroItems;
9+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroName;
10+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroType;
11+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroValues;
12+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\Type;
813

914
/**
1015
* @SerDe\AvroType("record")
1116
*
1217
* @SerDe\AvroName("ArraysWithComplexType")
1318
*/
19+
#[AvroType('record')]
20+
#[AvroName('ArraysWithComplexType')]
1421
class ArraysWithComplexType
1522
{
1623
/**
@@ -23,6 +30,13 @@ class ArraysWithComplexType
2330
* })
2431
* })
2532
*/
33+
#[AvroType(
34+
'array',
35+
attributes: new AvroItems(
36+
new AvroType(Type::STRING),
37+
new AvroType(Type::ARRAY, new AvroItems(new AvroType(Type::STRING))),
38+
)
39+
)]
2640
private array $arrayWithUnion;
2741

2842
/**
@@ -34,5 +48,14 @@ class ArraysWithComplexType
3448
* )
3549
* })
3650
*/
51+
#[AvroType(
52+
Type::ARRAY,
53+
attributes: new AvroItems(
54+
new AvroType(
55+
Type::MAP,
56+
new AvroValues(new AvroType(Type::STRING))
57+
),
58+
)
59+
)]
3760
private array $arrayWithMap;
3861
}

test/Objects/Schema/Generation/Fixture/EmptyRecord.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
namespace FlixTech\AvroSerializer\Test\Objects\Schema\Generation\Fixture;
66

77
use FlixTech\AvroSerializer\Objects\Schema\Generation\Annotations as SerDe;
8+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroName;
9+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroNamespace;
10+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroType;
811

912
/**
1013
* @SerDe\AvroName("EmptyRecord")
@@ -13,6 +16,9 @@
1316
*
1417
* @SerDe\AvroType("record")
1518
*/
19+
#[AvroName('EmptyRecord')]
20+
#[AvroNamespace('org.acme')]
21+
#[AvroType('record')]
1622
class EmptyRecord
1723
{
1824
}

test/Objects/Schema/Generation/Fixture/MapsWithComplexType.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,19 @@
55
namespace FlixTech\AvroSerializer\Test\Objects\Schema\Generation\Fixture;
66

77
use FlixTech\AvroSerializer\Objects\Schema\Generation\Annotations as SerDe;
8+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroItems;
9+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroName;
10+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroType;
11+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroValues;
12+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\Type;
813

914
/**
1015
* @SerDe\AvroType("record")
1116
*
1217
* @SerDe\AvroName("MapsWithComplexType")
1318
*/
19+
#[AvroType(Type::RECORD)]
20+
#[AvroName('MapsWithComplexType')]
1421
class MapsWithComplexType
1522
{
1623
/**
@@ -23,6 +30,16 @@ class MapsWithComplexType
2330
* })
2431
* })
2532
*/
33+
#[AvroType(
34+
Type::MAP,
35+
new AvroValues(
36+
Type::STRING,
37+
new AvroType(
38+
Type::ARRAY,
39+
new AvroItems(Type::STRING)
40+
)
41+
)
42+
)]
2643
private $mapWithUnion;
2744

2845
/**
@@ -34,5 +51,14 @@ class MapsWithComplexType
3451
* )
3552
* })
3653
*/
54+
#[AvroType(
55+
Type::MAP,
56+
new AvroValues(
57+
new AvroType(
58+
Type::ARRAY,
59+
new AvroItems(Type::STRING)
60+
)
61+
)
62+
)]
3763
private $mapWithArray;
3864
}

test/Objects/Schema/Generation/Fixture/PrimitiveTypes.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@
55
namespace FlixTech\AvroSerializer\Test\Objects\Schema\Generation\Fixture;
66

77
use FlixTech\AvroSerializer\Objects\Schema\Generation\Annotations as SerDe;
8+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroAliases;
9+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroDefault;
10+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroDoc;
11+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroName;
12+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroNamespace;
13+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroOrder;
14+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroType;
15+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\Order;
816

917
/**
1018
* @SerDe\AvroName("PrimitiveTypes")
@@ -13,13 +21,18 @@
1321
*
1422
* @SerDe\AvroType("record")
1523
*/
24+
#[AvroName('PrimitiveTypes')]
25+
#[AvroNamespace('org.acme')]
26+
#[AvroType('record')]
1627
class PrimitiveTypes
1728
{
1829
/**
1930
* @SerDe\AvroDoc("null type")
2031
*
2132
* @SerDe\AvroType("null")
2233
*/
34+
#[AvroDoc('null type')]
35+
#[AvroType('null')]
2336
private $nullType;
2437

2538
/**
@@ -29,39 +42,50 @@ class PrimitiveTypes
2942
*
3043
* @SerDe\AvroType("boolean")
3144
*/
45+
#[AvroName('isItTrue')]
46+
#[AvroDefault(false)]
47+
#[AvroType('boolean')]
3248
private $booleanType;
3349

3450
/**
3551
* @SerDe\AvroType("int")
3652
*/
53+
#[AvroType('int')]
3754
private $intType;
3855

3956
/**
4057
* @SerDe\AvroType("long")
4158
*
4259
* @SerDe\AvroOrder("ascending")
4360
*/
61+
#[AvroType('long')]
62+
#[AvroOrder(Order::ASC)]
4463
private $longType;
4564

4665
/**
4766
* @SerDe\AvroType("float")
4867
*
4968
* @SerDe\AvroAliases({"foo", "bar"})
5069
*/
70+
#[AvroType('float')]
71+
#[AvroAliases('foo', 'bar')]
5172
private $floatType;
5273

5374
/**
5475
* @SerDe\AvroType("double")
5576
*/
77+
#[AvroType('double')]
5678
private $doubleType;
5779

5880
/**
5981
* @SerDe\AvroType("bytes")
6082
*/
83+
#[AvroType('bytes')]
6184
private $bytesType;
6285

6386
/**
6487
* @SerDe\AvroType("string")
6588
*/
89+
#[AvroType('string')]
6690
private $stringType;
6791
}

test/Objects/Schema/Generation/Fixture/RecordWithComplexTypes.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,26 @@
55
namespace FlixTech\AvroSerializer\Test\Objects\Schema\Generation\Fixture;
66

77
use FlixTech\AvroSerializer\Objects\Schema\Generation\Annotations as SerDe;
8+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroAliases;
9+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroDefault;
10+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroItems;
11+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroName;
12+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroNamespace;
13+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroOrder;
14+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroSize;
15+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroSymbols;
16+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroType;
17+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\AvroValues;
18+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\Order;
19+
use FlixTech\AvroSerializer\Objects\Schema\Generation\Attributes\Type;
820

921
/**
1022
* @SerDe\AvroType("record")
1123
*
1224
* @SerDe\AvroName("RecordWithComplexTypes")
1325
*/
26+
#[AvroType('record')]
27+
#[AvroName('RecordWithComplexTypes')]
1428
class RecordWithComplexTypes
1529
{
1630
/**
@@ -21,6 +35,10 @@ class RecordWithComplexTypes
2135
* @SerDe\AvroDefault({"foo", "bar"}),
2236
* })
2337
*/
38+
#[AvroType(
39+
'array',
40+
new AvroItems(Type::STRING), new AvroDefault(['foo', 'bar'])
41+
)]
2442
private $array;
2543

2644
/**
@@ -31,6 +49,10 @@ class RecordWithComplexTypes
3149
* @SerDe\AvroDefault({"foo": 42, "bar": 42}),
3250
* })
3351
*/
52+
#[AvroType(
53+
'map',
54+
new AvroValues(Type::INT), new AvroDefault(['foo' => 42, 'bar' => 42])
55+
)]
3456
private $map;
3557

3658
/**
@@ -43,6 +65,12 @@ class RecordWithComplexTypes
4365
* @SerDe\AvroSymbols({"SPADES", "HEARTS", "DIAMONDS", "CLUBS"})
4466
* })
4567
*/
68+
#[AvroOrder(Order::ASC)]
69+
#[AvroType(
70+
Type::ENUM,
71+
new AvroName('Suit'),
72+
new AvroSymbols(['SPADES', 'HEARTS', 'DIAMONDS', 'CLUBS'])
73+
)]
4674
private $enum;
4775

4876
/**
@@ -57,6 +85,13 @@ class RecordWithComplexTypes
5785
* @SerDe\AvroSize(16)
5886
* })
5987
*/
88+
#[AvroType(
89+
Type::FIXED,
90+
new AvroName('md5'),
91+
new AvroNamespace('org.acme'),
92+
new AvroAliases('foo', 'bar'),
93+
new AvroSize(16)
94+
)]
6095
private $fixed;
6196

6297
/**
@@ -67,5 +102,11 @@ class RecordWithComplexTypes
67102
* @SerDe\AvroItems("string"),
68103
* })
69104
*/
105+
#[AvroType(Type::STRING)]
106+
#[AvroType(Type::INT)]
107+
#[AvroType(
108+
Type::ARRAY,
109+
new AvroItems(Type::STRING)
110+
)]
70111
private $union;
71112
}

0 commit comments

Comments
 (0)