File tree Expand file tree Collapse file tree 5 files changed +93
-4
lines changed Expand file tree Collapse file tree 5 files changed +93
-4
lines changed Original file line number Diff line number Diff line change 17
17
use EventEngine \JsonSchema \Type \EmailType ;
18
18
use EventEngine \JsonSchema \Type \EnumType ;
19
19
use EventEngine \JsonSchema \Type \FloatType ;
20
+ use EventEngine \JsonSchema \Type \IntEnumType ;
20
21
use EventEngine \JsonSchema \Type \IntType ;
21
22
use EventEngine \JsonSchema \Type \ObjectType ;
23
+ use EventEngine \JsonSchema \Type \StringEnumType ;
22
24
use EventEngine \JsonSchema \Type \StringType ;
23
25
use EventEngine \JsonSchema \Type \TypeRef ;
24
26
use EventEngine \JsonSchema \Type \UnionType ;
@@ -105,9 +107,20 @@ public static function boolean(): BoolType
105
107
return new BoolType ();
106
108
}
107
109
108
- public static function enum (array $ entries ): EnumType
110
+ public static function enum (array $ entries, string $ type = JsonSchema:: TYPE_STRING ): EnumType
109
111
{
110
- return new EnumType (...$ entries );
112
+ switch ($ type ) {
113
+ case JsonSchema::TYPE_STRING :
114
+ $ class = StringEnumType::class;
115
+ break ;
116
+ case JsonSchema::TYPE_INT :
117
+ $ class = IntEnumType::class;
118
+ break ;
119
+ default :
120
+ $ class = EnumType::class;
121
+ }
122
+
123
+ return new $ class (...$ entries );
111
124
}
112
125
113
126
public static function nullOr (Type $ schema ): Type
Original file line number Diff line number Diff line change @@ -23,12 +23,12 @@ class EnumType implements AnnotatedType
23
23
/**
24
24
* @var string|array
25
25
*/
26
- private $ type = JsonSchema::TYPE_STRING ;
26
+ protected $ type = JsonSchema::TYPE_STRING ;
27
27
28
28
/**
29
29
* @var string[]
30
30
*/
31
- private $ entries ;
31
+ protected $ entries ;
32
32
33
33
public function __construct (string ...$ entries )
34
34
{
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ declare (strict_types=1 );
4
+
5
+ namespace EventEngine \JsonSchema \Type ;
6
+
7
+ use EventEngine \JsonSchema \JsonSchema ;
8
+
9
+ class IntEnumType extends EnumType
10
+ {
11
+ /**
12
+ * @var string|array
13
+ */
14
+ protected $ type = JsonSchema::TYPE_INT ;
15
+
16
+ /**
17
+ * @var int[]
18
+ */
19
+ protected $ entries ;
20
+
21
+ public function __construct (int ...$ entries )
22
+ {
23
+ $ this ->entries = $ entries ;
24
+ }
25
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ declare (strict_types=1 );
4
+
5
+ namespace EventEngine \JsonSchema \Type ;
6
+
7
+ use EventEngine \JsonSchema \JsonSchema ;
8
+
9
+ class StringEnumType extends EnumType
10
+ {
11
+ /**
12
+ * @var string|array
13
+ */
14
+ protected $ type = JsonSchema::TYPE_STRING ;
15
+ }
Original file line number Diff line number Diff line change 11
11
12
12
namespace EventEngineTest \JsonSchema \Type ;
13
13
14
+ use EventEngine \JsonSchema \JsonSchema ;
14
15
use EventEngine \JsonSchema \Type \EnumType ;
15
16
use EventEngineTest \JsonSchema \BasicTestCase ;
16
17
@@ -47,4 +48,39 @@ public function it_creates_nullable_enum_type()
47
48
$ enumType ->toArray ()
48
49
);
49
50
}
51
+
52
+
53
+ /**
54
+ * @test
55
+ */
56
+ public function it_creates_int_enum_type ()
57
+ {
58
+ $ enumType = JsonSchema::enum ([0 , 1 ], JsonSchema::TYPE_INT );
59
+
60
+ $ this ->assertEquals (
61
+ [
62
+ 'type ' => 'integer ' ,
63
+ 'enum ' => [0 , 1 ],
64
+ ],
65
+ $ enumType ->toArray ()
66
+ );
67
+ }
68
+
69
+
70
+ /**
71
+ * @test
72
+ */
73
+ public function it_creates_int_nullable_enum_type ()
74
+ {
75
+ $ enumType = JsonSchema::enum ([0 , 1 ], JsonSchema::TYPE_INT )
76
+ ->asNullable ();
77
+
78
+ $ this ->assertEquals (
79
+ [
80
+ 'type ' => ['integer ' , 'null ' ],
81
+ 'enum ' => [0 , 1 , null ]
82
+ ],
83
+ $ enumType ->toArray ()
84
+ );
85
+ }
50
86
}
You can’t perform that action at this time.
0 commit comments