1: <?php declare(strict_types=1);
2:
3: namespace Salient\Sync\Http;
4:
5: use Salient\Contract\Core\Pipeline\PipelineInterface;
6: use Salient\Contract\Core\ArrayMapperInterface;
7: use Salient\Contract\Core\ListConformity;
8: use Salient\Contract\Curler\CurlerInterface;
9: use Salient\Contract\Curler\CurlerPagerInterface;
10: use Salient\Contract\Http\HttpHeadersInterface;
11: use Salient\Contract\Http\HttpRequestMethod;
12: use Salient\Contract\Sync\EntitySource;
13: use Salient\Contract\Sync\FilterPolicy;
14: use Salient\Contract\Sync\SyncContextInterface;
15: use Salient\Contract\Sync\SyncEntityInterface;
16: use Salient\Contract\Sync\SyncOperation as OP;
17: use Salient\Core\AbstractBuilder;
18: use Salient\Sync\Support\SyncPipelineArgument;
19: use Salient\Sync\AbstractSyncDefinition;
20: use Closure;
21:
22: /**
23: * A fluent HttpSyncDefinition factory
24: *
25: * @method $this operations(array<OP::*> $value) Supported sync operations
26: * @method $this path(string[]|string|null $value) Path or paths to the endpoint servicing the entity, e.g. "/v1/user" (see {@see HttpSyncDefinition::$Path})
27: * @method $this query(mixed[]|null $value) Query parameters applied to the sync operation URL (see {@see HttpSyncDefinition::$Query})
28: * @method $this headers(?HttpHeadersInterface $value) HTTP headers applied to the sync operation request (see {@see HttpSyncDefinition::$Headers})
29: * @method $this pager(?CurlerPagerInterface $value) Pagination handler for the endpoint servicing the entity (see {@see HttpSyncDefinition::$Pager})
30: * @method $this alwaysPaginate(bool $value = true) Use the pager to process requests even if no pagination is required (default: false)
31: * @method $this callback((callable(HttpSyncDefinition<TEntity,TProvider>, OP::*, SyncContextInterface, mixed...): HttpSyncDefinition<TEntity,TProvider>)|null $value) Callback applied to the definition before each sync operation (see {@see HttpSyncDefinition::$Callback})
32: * @method $this conformity(ListConformity::* $value) Conformity level of data returned by the provider for this entity (see {@see AbstractSyncDefinition::$Conformity})
33: * @method $this filterPolicy(FilterPolicy::*|null $value) Action to take when filters are not claimed by the provider (see {@see AbstractSyncDefinition::$FilterPolicy})
34: * @method $this expiry(int<-1,max>|null $value) Seconds before cached responses expire (see {@see HttpSyncDefinition::$Expiry})
35: * @method $this methodMap(array<OP::*,HttpRequestMethod::*> $value) Array that maps sync operations to HTTP request methods (see {@see HttpSyncDefinition::$MethodMap})
36: * @method $this curlerCallback((callable(CurlerInterface, HttpSyncDefinition<TEntity,TProvider>, OP::*, SyncContextInterface, mixed...): CurlerInterface)|null $value) Callback applied to the Curler instance created to perform each sync operation (see {@see HttpSyncDefinition::$CurlerCallback})
37: * @method $this syncOneEntityPerRequest(bool $value = true) Perform CREATE_LIST, UPDATE_LIST and DELETE_LIST operations on one entity per HTTP request (default: false)
38: * @method $this overrides(array<int-mask-of<OP::*>,Closure(HttpSyncDefinition<TEntity,TProvider>, OP::*, SyncContextInterface, mixed...): (iterable<TEntity>|TEntity)> $value) Array that maps sync operations to closures that override other implementations (see {@see AbstractSyncDefinition::$Overrides})
39: * @method $this keyMap(array<array-key,array-key|array-key[]>|null $value) Array that maps keys to properties for entity data returned by the provider (see {@see AbstractSyncDefinition::$KeyMap})
40: * @method $this keyMapFlags(int-mask-of<ArrayMapperInterface::*> $value) Array mapper flags used if a key map is provided
41: * @method $this readFromList(bool $value = true) Perform READ operations by iterating over entities returned by READ_LIST (default: false; see {@see AbstractSyncDefinition::$ReadFromList})
42: * @method $this returnEntitiesFrom(EntitySource::*|null $value) Source of entity data for the return value of a successful CREATE, UPDATE or DELETE operation
43: * @method $this args(mixed[]|null $value) Arguments passed to each sync operation
44: *
45: * @template TEntity of SyncEntityInterface
46: * @template TProvider of HttpSyncProvider
47: *
48: * @extends AbstractBuilder<HttpSyncDefinition<TEntity,TProvider>>
49: *
50: * @generated
51: */
52: final class HttpSyncDefinitionBuilder extends AbstractBuilder
53: {
54: /**
55: * @internal
56: */
57: protected static function getService(): string
58: {
59: return HttpSyncDefinition::class;
60: }
61:
62: /**
63: * The entity being serviced
64: *
65: * @template T of SyncEntityInterface
66: *
67: * @param class-string<T> $value
68: * @return static<T,TProvider>
69: */
70: public function entity(string $value)
71: {
72: /** @var static<T,TProvider> */
73: return $this->withValueB(__FUNCTION__, $value);
74: }
75:
76: /**
77: * The provider servicing the entity
78: *
79: * @template T of HttpSyncProvider
80: *
81: * @param T $value
82: * @return static<TEntity,T>
83: */
84: public function provider(HttpSyncProvider $value)
85: {
86: /** @var static<TEntity,T> */
87: return $this->withValueB(__FUNCTION__, $value);
88: }
89:
90: /**
91: * Pipeline that maps provider data to a serialized entity, or `null` if mapping is not required
92: *
93: * @template T of SyncEntityInterface
94: *
95: * @param PipelineInterface<mixed[],T,SyncPipelineArgument>|null $value
96: * @return static<T,TProvider>
97: */
98: public function pipelineFromBackend(?PipelineInterface $value)
99: {
100: /** @var static<T,TProvider> */
101: return $this->withValueB(__FUNCTION__, $value);
102: }
103:
104: /**
105: * Pipeline that maps a serialized entity to provider data, or `null` if mapping is not required
106: *
107: * @template T of SyncEntityInterface
108: *
109: * @param PipelineInterface<T,mixed[],SyncPipelineArgument>|null $value
110: * @return static<T,TProvider>
111: */
112: public function pipelineToBackend(?PipelineInterface $value)
113: {
114: /** @var static<T,TProvider> */
115: return $this->withValueB(__FUNCTION__, $value);
116: }
117: }
118: