1<?php
2
3declare(strict_types=1);
4
5namespace JMS\Serializer\Annotation;
6
7use JMS\Serializer\Exception\InvalidArgumentException;
8
9/**
10 * @Annotation
11 * @Target({"METHOD", "CLASS"})
12 *
13 * @author Alexander Klimenkov <alx.devel@gmail.com>
14 */
15final class VirtualProperty
16{
17    /**
18     * @var string
19     */
20    public $exp;
21
22    /**
23     * @var string
24     */
25    public $name;
26
27    /**
28     * @var array
29     */
30    public $options = [];
31
32    public function __construct(array $data)
33    {
34        if (isset($data['value'])) {
35            $data['name'] = $data['value'];
36            unset($data['value']);
37        }
38
39        foreach ($data as $key => $value) {
40            if (!property_exists(self::class, $key)) {
41                throw new InvalidArgumentException(sprintf('Unknown property "%s" on annotation "%s".', $key, self::class));
42            }
43            $this->{$key} = $value;
44        }
45    }
46}
47