Skip to content

Commit 196fd29

Browse files
feat(client): use real enums
1 parent fcb58d5 commit 196fd29

File tree

21 files changed

+140
-166
lines changed

21 files changed

+140
-166
lines changed

src/Core/Attributes/Api.php

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Scrapegraphai\Core\Conversion\Contracts\Converter;
88
use Scrapegraphai\Core\Conversion\Contracts\ConverterSource;
9+
use Scrapegraphai\Core\Conversion\EnumOf;
910
use Scrapegraphai\Core\Conversion\ListOf;
1011
use Scrapegraphai\Core\Conversion\MapOf;
1112

@@ -15,14 +16,15 @@
1516
#[\Attribute(\Attribute::TARGET_PROPERTY)]
1617
final class Api
1718
{
18-
/**
19-
* @var class-string<ConverterSource>|Converter|string|null
20-
*/
19+
/** @var class-string<ConverterSource>|Converter|string|null */
2120
public readonly Converter|string|null $type;
2221

22+
/** @var array<string,Converter> */
23+
private static array $enumConverters = [];
24+
2325
/**
2426
* @param class-string<ConverterSource>|Converter|string|null $type
25-
* @param class-string<ConverterSource>|Converter|null $enum
27+
* @param class-string<\BackedEnum>|Converter|null $enum
2628
* @param class-string<ConverterSource>|Converter|null $union
2729
* @param class-string<ConverterSource>|Converter|string|null $list
2830
* @param class-string<ConverterSource>|Converter|string|null $map
@@ -37,6 +39,28 @@ public function __construct(
3739
public readonly bool $nullable = false,
3840
public readonly bool $optional = false,
3941
) {
40-
$this->type = $type ?? $enum ?? $union ?? ($list ? new ListOf($list) : ($map ? new MapOf($map) : null));
42+
$type ??= $union;
43+
if (null !== $list) {
44+
$type ??= new ListOf($list);
45+
}
46+
if (null !== $map) {
47+
$type ??= new MapOf($map);
48+
}
49+
if (null !== $enum) {
50+
$type ??= $enum instanceof Converter ? $enum : $this->getEnumConverter($enum);
51+
}
52+
53+
$this->type = $type;
54+
}
55+
56+
/** @property class-string<\BackedEnum> $enum */
57+
private function getEnumConverter(string $enum): Converter
58+
{
59+
if (!isset(self::$enumConverters[$enum])) {
60+
$converter = new EnumOf(array_column($enum::cases(), 'value')); // @phpstan-ignore-line
61+
self::$enumConverters[$enum] = $converter;
62+
}
63+
64+
return self::$enumConverters[$enum];
4165
}
4266
}

src/Crawl/CrawlGetResultsResponse.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
/**
1414
* @phpstan-type crawl_get_results_response = array{
1515
* result?: mixed|string|null,
16-
* status?: Status::*|null,
16+
* status?: value-of<Status>|null,
1717
* taskID?: string|null,
1818
* traceback?: string|null,
1919
* }
@@ -31,7 +31,7 @@ final class CrawlGetResultsResponse implements BaseModel
3131
#[Api(union: Result::class, optional: true)]
3232
public mixed $result;
3333

34-
/** @var Status::*|null $status */
34+
/** @var value-of<Status>|null $status */
3535
#[Api(enum: Status::class, optional: true)]
3636
public ?string $status;
3737

@@ -55,18 +55,18 @@ public function __construct()
5555
* You must use named parameters to construct any parameters with a default value.
5656
*
5757
* @param mixed|string $result
58-
* @param Status::* $status
58+
* @param Status|value-of<Status> $status
5959
*/
6060
public static function with(
6161
mixed $result = null,
62-
?string $status = null,
62+
Status|string|null $status = null,
6363
?string $taskID = null,
6464
?string $traceback = null,
6565
): self {
6666
$obj = new self;
6767

6868
null !== $result && $obj->result = $result;
69-
null !== $status && $obj->status = $status;
69+
null !== $status && $obj->status = $status instanceof Status ? $status->value : $status;
7070
null !== $taskID && $obj->taskID = $taskID;
7171
null !== $traceback && $obj->traceback = $traceback;
7272

@@ -87,12 +87,12 @@ public function withResult(mixed $result): self
8787
}
8888

8989
/**
90-
* @param Status::* $status
90+
* @param Status|value-of<Status> $status
9191
*/
92-
public function withStatus(string $status): self
92+
public function withStatus(Status|string $status): self
9393
{
9494
$obj = clone $this;
95-
$obj->status = $status;
95+
$obj->status = $status instanceof Status ? $status->value : $status;
9696

9797
return $obj;
9898
}

src/Crawl/CrawlGetResultsResponse/Status.php

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,17 @@
44

55
namespace Scrapegraphai\Crawl\CrawlGetResultsResponse;
66

7-
use Scrapegraphai\Core\Concerns\SdkEnum;
8-
use Scrapegraphai\Core\Conversion\Contracts\ConverterSource;
9-
10-
final class Status implements ConverterSource
7+
enum Status: string
118
{
12-
use SdkEnum;
13-
14-
public const PENDING = 'PENDING';
9+
case PENDING = 'PENDING';
1510

16-
public const STARTED = 'STARTED';
11+
case STARTED = 'STARTED';
1712

18-
public const SUCCESS = 'SUCCESS';
13+
case SUCCESS = 'SUCCESS';
1914

20-
public const FAILURE = 'FAILURE';
15+
case FAILURE = 'FAILURE';
2116

22-
public const RETRY = 'RETRY';
17+
case RETRY = 'RETRY';
2318

24-
public const REVOKED = 'REVOKED';
19+
case REVOKED = 'REVOKED';
2520
}

src/GenerateSchema/GenerateSchemaGetResponse/CompletedSchemaGenerationResponse.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* generatedSchema?: mixed,
1616
* refinedPrompt?: string|null,
1717
* requestID?: string|null,
18-
* status?: Status::*|null,
18+
* status?: value-of<Status>|null,
1919
* userPrompt?: string|null,
2020
* }
2121
*/
@@ -36,7 +36,7 @@ final class CompletedSchemaGenerationResponse implements BaseModel
3636
#[Api('request_id', optional: true)]
3737
public ?string $requestID;
3838

39-
/** @var Status::*|null $status */
39+
/** @var value-of<Status>|null $status */
4040
#[Api(enum: Status::class, optional: true)]
4141
public ?string $status;
4242

@@ -53,14 +53,14 @@ public function __construct()
5353
*
5454
* You must use named parameters to construct any parameters with a default value.
5555
*
56-
* @param Status::* $status
56+
* @param Status|value-of<Status> $status
5757
*/
5858
public static function with(
5959
?string $error = null,
6060
mixed $generatedSchema = null,
6161
?string $refinedPrompt = null,
6262
?string $requestID = null,
63-
?string $status = null,
63+
Status|string|null $status = null,
6464
?string $userPrompt = null,
6565
): self {
6666
$obj = new self;
@@ -69,7 +69,7 @@ public static function with(
6969
null !== $generatedSchema && $obj->generatedSchema = $generatedSchema;
7070
null !== $refinedPrompt && $obj->refinedPrompt = $refinedPrompt;
7171
null !== $requestID && $obj->requestID = $requestID;
72-
null !== $status && $obj->status = $status;
72+
null !== $status && $obj->status = $status instanceof Status ? $status->value : $status;
7373
null !== $userPrompt && $obj->userPrompt = $userPrompt;
7474

7575
return $obj;
@@ -108,12 +108,12 @@ public function withRequestID(string $requestID): self
108108
}
109109

110110
/**
111-
* @param Status::* $status
111+
* @param Status|value-of<Status> $status
112112
*/
113-
public function withStatus(string $status): self
113+
public function withStatus(Status|string $status): self
114114
{
115115
$obj = clone $this;
116-
$obj->status = $status;
116+
$obj->status = $status instanceof Status ? $status->value : $status;
117117

118118
return $obj;
119119
}

src/GenerateSchema/GenerateSchemaGetResponse/CompletedSchemaGenerationResponse/Status.php

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,7 @@
44

55
namespace Scrapegraphai\GenerateSchema\GenerateSchemaGetResponse\CompletedSchemaGenerationResponse;
66

7-
use Scrapegraphai\Core\Concerns\SdkEnum;
8-
use Scrapegraphai\Core\Conversion\Contracts\ConverterSource;
9-
10-
final class Status implements ConverterSource
7+
enum Status: string
118
{
12-
use SdkEnum;
13-
14-
public const COMPLETED = 'completed';
9+
case COMPLETED = 'completed';
1510
}

src/GenerateSchema/GenerateSchemaGetResponse/FailedSchemaGenerationResponse.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* generatedSchema?: mixed,
1616
* refinedPrompt?: string|null,
1717
* requestID?: string|null,
18-
* status?: Status::*|null,
18+
* status?: value-of<Status>|null,
1919
* userPrompt?: string|null,
2020
* }
2121
*/
@@ -36,7 +36,7 @@ final class FailedSchemaGenerationResponse implements BaseModel
3636
#[Api('request_id', optional: true)]
3737
public ?string $requestID;
3838

39-
/** @var Status::*|null $status */
39+
/** @var value-of<Status>|null $status */
4040
#[Api(enum: Status::class, optional: true)]
4141
public ?string $status;
4242

@@ -53,14 +53,14 @@ public function __construct()
5353
*
5454
* You must use named parameters to construct any parameters with a default value.
5555
*
56-
* @param Status::* $status
56+
* @param Status|value-of<Status> $status
5757
*/
5858
public static function with(
5959
?string $error = null,
6060
mixed $generatedSchema = null,
6161
?string $refinedPrompt = null,
6262
?string $requestID = null,
63-
?string $status = null,
63+
Status|string|null $status = null,
6464
?string $userPrompt = null,
6565
): self {
6666
$obj = new self;
@@ -69,7 +69,7 @@ public static function with(
6969
null !== $generatedSchema && $obj->generatedSchema = $generatedSchema;
7070
null !== $refinedPrompt && $obj->refinedPrompt = $refinedPrompt;
7171
null !== $requestID && $obj->requestID = $requestID;
72-
null !== $status && $obj->status = $status;
72+
null !== $status && $obj->status = $status instanceof Status ? $status->value : $status;
7373
null !== $userPrompt && $obj->userPrompt = $userPrompt;
7474

7575
return $obj;
@@ -108,12 +108,12 @@ public function withRequestID(string $requestID): self
108108
}
109109

110110
/**
111-
* @param Status::* $status
111+
* @param Status|value-of<Status> $status
112112
*/
113-
public function withStatus(string $status): self
113+
public function withStatus(Status|string $status): self
114114
{
115115
$obj = clone $this;
116-
$obj->status = $status;
116+
$obj->status = $status instanceof Status ? $status->value : $status;
117117

118118
return $obj;
119119
}

src/GenerateSchema/GenerateSchemaGetResponse/FailedSchemaGenerationResponse/Status.php

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,7 @@
44

55
namespace Scrapegraphai\GenerateSchema\GenerateSchemaGetResponse\FailedSchemaGenerationResponse;
66

7-
use Scrapegraphai\Core\Concerns\SdkEnum;
8-
use Scrapegraphai\Core\Conversion\Contracts\ConverterSource;
9-
10-
final class Status implements ConverterSource
7+
enum Status: string
118
{
12-
use SdkEnum;
13-
14-
public const FAILED = 'failed';
9+
case FAILED = 'failed';
1510
}

src/GenerateSchema/GenerateSchemaNewResponse.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* generatedSchema?: mixed,
1616
* refinedPrompt?: string|null,
1717
* requestID?: string|null,
18-
* status?: Status::*|null,
18+
* status?: value-of<Status>|null,
1919
* userPrompt?: string|null,
2020
* }
2121
*/
@@ -42,7 +42,7 @@ final class GenerateSchemaNewResponse implements BaseModel
4242
#[Api('request_id', optional: true)]
4343
public ?string $requestID;
4444

45-
/** @var Status::*|null $status */
45+
/** @var value-of<Status>|null $status */
4646
#[Api(enum: Status::class, optional: true)]
4747
public ?string $status;
4848

@@ -59,14 +59,14 @@ public function __construct()
5959
*
6060
* You must use named parameters to construct any parameters with a default value.
6161
*
62-
* @param Status::* $status
62+
* @param Status|value-of<Status> $status
6363
*/
6464
public static function with(
6565
?string $error = null,
6666
mixed $generatedSchema = null,
6767
?string $refinedPrompt = null,
6868
?string $requestID = null,
69-
?string $status = null,
69+
Status|string|null $status = null,
7070
?string $userPrompt = null,
7171
): self {
7272
$obj = new self;
@@ -75,7 +75,7 @@ public static function with(
7575
null !== $generatedSchema && $obj->generatedSchema = $generatedSchema;
7676
null !== $refinedPrompt && $obj->refinedPrompt = $refinedPrompt;
7777
null !== $requestID && $obj->requestID = $requestID;
78-
null !== $status && $obj->status = $status;
78+
null !== $status && $obj->status = $status instanceof Status ? $status->value : $status;
7979
null !== $userPrompt && $obj->userPrompt = $userPrompt;
8080

8181
return $obj;
@@ -120,12 +120,12 @@ public function withRequestID(string $requestID): self
120120
}
121121

122122
/**
123-
* @param Status::* $status
123+
* @param Status|value-of<Status> $status
124124
*/
125-
public function withStatus(string $status): self
125+
public function withStatus(Status|string $status): self
126126
{
127127
$obj = clone $this;
128-
$obj->status = $status;
128+
$obj->status = $status instanceof Status ? $status->value : $status;
129129

130130
return $obj;
131131
}

src/GenerateSchema/GenerateSchemaNewResponse/Status.php

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,7 @@
44

55
namespace Scrapegraphai\GenerateSchema\GenerateSchemaNewResponse;
66

7-
use Scrapegraphai\Core\Concerns\SdkEnum;
8-
use Scrapegraphai\Core\Conversion\Contracts\ConverterSource;
9-
10-
final class Status implements ConverterSource
7+
enum Status: string
118
{
12-
use SdkEnum;
13-
14-
public const COMPLETED = 'completed';
9+
case COMPLETED = 'completed';
1510
}

0 commit comments

Comments
 (0)