--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Mapping;
+
+/**
+ * {@inheritdoc}
+ *
+ * @author Kévin Dunglas <dunglas@gmail.com>
+ */
+class AttributeMetadata implements AttributeMetadataInterface
+{
+ /**
+ * @var string
+ *
+ * @internal This property is public in order to reduce the size of the
+ * class' serialized representation. Do not access it. Use
+ * {@link getName()} instead.
+ */
+ public $name;
+
+ /**
+ * @var array
+ *
+ * @internal This property is public in order to reduce the size of the
+ * class' serialized representation. Do not access it. Use
+ * {@link getGroups()} instead.
+ */
+ public $groups = array();
+
+ /**
+ * Constructs a metadata for the given attribute.
+ *
+ * @param string $name
+ */
+ public function __construct($name)
+ {
+ $this->name = $name;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function addGroup($group)
+ {
+ if (!in_array($group, $this->groups)) {
+ $this->groups[] = $group;
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getGroups()
+ {
+ return $this->groups;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function merge(AttributeMetadataInterface $attributeMetadata)
+ {
+ foreach ($attributeMetadata->getGroups() as $group) {
+ $this->addGroup($group);
+ }
+ }
+
+ /**
+ * Returns the names of the properties that should be serialized.
+ *
+ * @return string[]
+ */
+ public function __sleep()
+ {
+ return array('name', 'groups');
+ }
+}