SpaceValue::fromEnum()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 3
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace SimpleSAML\XML\Type;
6
7
use SimpleSAML\XML\Assert\Assert;
8
use SimpleSAML\XML\Attribute;
9
use SimpleSAML\XML\Constants as C;
10
use SimpleSAML\XML\XML\Enumeration\SpaceEnum;
11
use SimpleSAML\XMLSchema\Exception\SchemaViolationException;
12
use SimpleSAML\XMLSchema\Type\Interface\AttributeTypeInterface;
13
use SimpleSAML\XMLSchema\Type\NCNameValue;
14
15
/**
16
 * @package simplesaml/xml-common
17
 */
18
class SpaceValue extends NCNameValue implements AttributeTypeInterface
19
{
20
    /**
21
     * Validate the value.
22
     *
23
     * @param string $value
24
     * @throws \SimpleSAML\XMLSchema\Exception\SchemaViolationException on failure
25
     * @return void
26
     */
27
    protected function validateValue(string $value): void
28
    {
29
        $sanitized = $this->sanitizeValue($value);
30
        parent::validateValue($sanitized);
31
32
        Assert::oneOf(
33
            $sanitized,
34
            [
35
                SpaceEnum::Default->value,
36
                SpaceEnum::Preserve->value,
37
            ],
38
            SchemaViolationException::class,
39
        );
40
    }
41
42
43
    /**
44
     * @param \SimpleSAML\XML\XML\Enumeration\SpaceEnum $value
45
     * @return static
46
     */
47
    public static function fromEnum(SpaceEnum $value): static
48
    {
49
        return new static($value->value);
50
    }
51
52
53
    /**
54
     * @return \SimpleSAML\XML\XML\Enumeration\SpaceEnum $value
55
     */
56
    public function toEnum(): SpaceEnum
57
    {
58
        return SpaceEnum::from($this->getValue());
59
    }
60
61
62
    /**
63
     * Convert this value to an attribute
64
     *
65
     * @return \SimpleSAML\XML\Attribute
66
     */
67
    public function toAttribute(): Attribute
68
    {
69
        return new Attribute(C::NS_XML, 'xml', 'space', $this);
70
    }
71
}
72