Completed
Push — devel ( adbcf9...17c44c )
by Alex
03:43 queued 01:44
created

SerializationFeature::setup()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 38

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 1.0414

Importance

Changes 0
Metric Value
dl 0
loc 38
ccs 17
cts 26
cp 0.6538
rs 9.312
c 0
b 0
f 0
cc 1
nc 1
nop 3
crap 1.0414
1
<?php
2
namespace PSB\Core\Serialization;
3
4
5
use PSB\Core\Feature\Feature;
6
use PSB\Core\ObjectBuilder\BuilderInterface;
7
use PSB\Core\Pipeline\Incoming\IncomingContextFactory;
8
use PSB\Core\Pipeline\Incoming\IncomingLogicalMessageFactory;
9
use PSB\Core\Pipeline\Outgoing\OutgoingContextFactory;
10
use PSB\Core\Pipeline\PipelineModifications;
11
use PSB\Core\Serialization\Pipeline\DeserializeLogicalMessageConnector;
12
use PSB\Core\Serialization\Pipeline\SerializeMessageConnector;
13
use PSB\Core\Util\Settings;
14
15
class SerializationFeature extends Feature
16
{
17
18
    /**
19
     * Method will always be executed and should be used to determine whether to enable or disable the feature,
20
     * configure default settings, configure dependencies, configure prerequisites and register startup tasks.
21
     */
22 1
    public function describe()
23
    {
24 1
        $this->enableByDefault();
25 1
    }
26
27
    /**
28
     * Method is called if all defined conditions are met and the feature is marked as enabled.
29
     * Use this method to configure and initialize all required components for the feature like
30
     * the steps in the pipeline or the instances/factories in the container.
31
     *
32
     * @param Settings              $settings
33
     * @param BuilderInterface      $builder
34
     * @param PipelineModifications $pipelineModifications
35
     */
36 1
    public function setup(Settings $settings, BuilderInterface $builder, PipelineModifications $pipelineModifications)
37
    {
38
        /** @var SerializationDefinition $definition */
39 1
        $definition = $settings->get(SerializationDefinition::class);
40 1
        $serializerFactory = $definition->formalize($settings);
41
42 1
        $builder->defineSingleton(MessageSerializerInterface::class, $serializerFactory);
43 1
        $builder->defineSingleton(
44 1
            MessageDeserializerResolver::class,
45
            function () use ($builder) {
46
                $serializer = $builder->build(MessageSerializerInterface::class);
47
                return new MessageDeserializerResolver([$serializer], get_class($serializer));
48 1
            }
49
        );
50 1
        $builder->defineSingleton(IncomingLogicalMessageFactory::class, new IncomingLogicalMessageFactory());
51
52 1
        $pipelineModifications->registerStep(
53 1
            'DeserializeLogicalMessageConnector',
54 1
            DeserializeLogicalMessageConnector::class,
55
            function () use ($builder) {
56
                return new DeserializeLogicalMessageConnector(
57
                    $builder->build(MessageDeserializerResolver::class),
58
                    $builder->build(IncomingLogicalMessageFactory::class),
59
                    $builder->build(IncomingContextFactory::class)
60
                );
61 1
            }
62
        );
63 1
        $pipelineModifications->registerStep(
64 1
            'SerializeMessageConnector',
65 1
            SerializeMessageConnector::class,
66
            function () use ($builder) {
67
                return new SerializeMessageConnector(
68
                    $builder->build(MessageSerializerInterface::class),
69
                    $builder->build(OutgoingContextFactory::class)
70
                );
71 1
            }
72
        );
73 1
    }
74
}
75