forked from SoftCreatR/JSONPath
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJSONPathToken.php
More file actions
78 lines (61 loc) · 1.63 KB
/
JSONPathToken.php
File metadata and controls
78 lines (61 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
/**
* JSONPath implementation for PHP.
*
* @license https://github.com/SoftCreatR/JSONPath/blob/main/LICENSE MIT License
*/
namespace Flow\JSONPath;
class JSONPathToken
{
/*
* Tokens
*/
public const T_INDEX = 'index';
public const T_RECURSIVE = 'recursive';
public const T_QUERY_RESULT = 'queryResult';
public const T_QUERY_MATCH = 'queryMatch';
public const T_SLICE = 'slice';
public const T_INDEXES = 'indexes';
public string $type;
public mixed $value;
/**
* @throws JSONPathException
*/
public function __construct(string $type, $value)
{
$this->validateType($type);
$this->type = $type;
$this->value = $value;
}
/**
* @throws JSONPathException
*/
public function validateType(string $type): void
{
if (!\in_array($type, static::getTypes(), true)) {
throw new JSONPathException('Invalid token: ' . $type);
}
}
public static function getTypes(): array
{
return [
static::T_INDEX,
static::T_RECURSIVE,
static::T_QUERY_RESULT,
static::T_QUERY_MATCH,
static::T_SLICE,
static::T_INDEXES,
];
}
/**
* @throws JSONPathException
*/
public function buildFilter(bool $options)
{
$filterClass = 'Flow\\JSONPath\\Filters\\' . \ucfirst($this->type) . 'Filter';
if (!\class_exists($filterClass)) {
throw new JSONPathException("No filter class exists for token [{$this->type}]");
}
return new $filterClass($this, $options);
}
}