2019-12-13 22:45:32 +01:00
< ? php
/*
* This file is part of the NelmioApiDocBundle package .
*
* ( c ) Nelmio
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Nelmio\ApiDocBundle\PropertyDescriber ;
2020-02-18 21:08:48 +01:00
use Nelmio\ApiDocBundle\Describer\ModelRegistryAwareInterface ;
use Nelmio\ApiDocBundle\Describer\ModelRegistryAwareTrait ;
2019-12-13 22:45:32 +01:00
use Nelmio\ApiDocBundle\Model\Model ;
2020-05-28 13:19:11 +02:00
use OpenApi\Annotations as OA ;
2019-12-13 22:45:32 +01:00
use Symfony\Component\PropertyInfo\Type ;
2020-02-18 21:08:48 +01:00
class ObjectPropertyDescriber implements PropertyDescriberInterface , ModelRegistryAwareInterface
2019-12-13 22:45:32 +01:00
{
2020-02-18 21:08:48 +01:00
use ModelRegistryAwareTrait ;
2019-12-13 22:45:32 +01:00
2020-06-16 13:11:53 +02:00
public function describe ( array $types , OA\Schema $property , array $groups = null )
2019-12-13 22:45:32 +01:00
{
2020-06-16 13:11:53 +02:00
$type = new Type ( $types [ 0 ] -> getBuiltinType (), false , $types [ 0 ] -> getClassName (), $types [ 0 ] -> isCollection (), $types [ 0 ] -> getCollectionKeyType (), $types [ 0 ] -> getCollectionValueType ()); // ignore nullable field
if ( $types [ 0 ] -> isNullable ()) {
$property -> nullable = true ;
2020-07-06 19:50:34 +02:00
$property -> allOf = [ new OA\Schema ([ 'ref' => $this -> modelRegistry -> register ( new Model ( $type , $groups ))])];
2020-06-16 13:11:53 +02:00
return ;
}
2019-12-13 22:45:32 +01:00
2020-05-28 13:19:11 +02:00
$property -> ref = $this -> modelRegistry -> register ( new Model ( $type , $groups ));
2019-12-13 22:45:32 +01:00
}
2020-06-16 13:11:53 +02:00
public function supports ( array $types ) : bool
2019-12-13 22:45:32 +01:00
{
2020-06-16 13:11:53 +02:00
return 1 === count ( $types ) && Type :: BUILTIN_TYPE_OBJECT === $types [ 0 ] -> getBuiltinType ();
2019-12-13 22:45:32 +01:00
}
2019-12-13 22:48:28 +01:00
}