parameters:
    ezpublish_rest.output.value_object_visitor.base.class: eZ\Publish\Core\REST\Common\Output\ValueObjectVisitor
    ezpublish_rest.output.value_object_visitor.ContentObjectStates.class: eZ\Publish\Core\REST\Common\Output\ValueObjectVisitor\ContentObjectStates

    # Errors
    ezpublish_rest.output.value_object_visitor.InvalidArgumentException.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\InvalidArgumentException
    ezpublish_rest.output.value_object_visitor.NotFoundException.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\NotFoundException
    ezpublish_rest.output.value_object_visitor.UnauthorizedException.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\UnauthorizedException
    ezpublish_rest.output.value_object_visitor.BadStateException.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\BadStateException
    ezpublish_rest.output.value_object_visitor.BadRequestException.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\BadRequestException
    ezpublish_rest.output.value_object_visitor.ForbiddenException.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\ForbiddenException
    ezpublish_rest.output.value_object_visitor.Exception.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\Exception
    ezpublish_rest.output.value_object_visitor.NotImplementedException.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\NotImplementedException

    # Section
    ezpublish_rest.output.value_object_visitor.SectionList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\SectionList
    ezpublish_rest.output.value_object_visitor.CreatedSection.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedSection
    ezpublish_rest.output.value_object_visitor.Section.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\Section
    ezpublish_rest.output.value_object_visitor.SectionCreateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\SectionCreateStruct
    ezpublish_rest.output.value_object_visitor.SectionUpdateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\SectionUpdateStruct

    # URLWildcard
    ezpublish_rest.output.value_object_visitor.URLWildcardList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\URLWildcardList
    ezpublish_rest.output.value_object_visitor.URLWildcard.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\URLWildcard
    ezpublish_rest.output.value_object_visitor.CreatedURLWildcard.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedURLWildcard

    # URLAlias
    ezpublish_rest.output.value_object_visitor.URLAliasList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\URLAliasList
    ezpublish_rest.output.value_object_visitor.URLAliasRefList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\URLAliasRefList
    ezpublish_rest.output.value_object_visitor.URLAlias.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\URLAlias
    ezpublish_rest.output.value_object_visitor.CreatedURLAlias.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedURLAlias

    # Content
    ezpublish_rest.output.value_object_visitor.ContentList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\ContentList
    ezpublish_rest.output.value_object_visitor.RestContent.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RestContent
    ezpublish_rest.output.value_object_visitor.CreatedContent.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedContent
    ezpublish_rest.output.value_object_visitor.VersionList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\VersionList
    ezpublish_rest.output.value_object_visitor.CreatedVersion.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedVersion
    ezpublish_rest.output.value_object_visitor.VersionInfo.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\VersionInfo
    ezpublish_rest.output.value_object_visitor.ImageVariation.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\ImageVariation
    ezpublish_rest.output.value_object_visitor.Version.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\Version

    # User group
    ezpublish_rest.output.value_object_visitor.RestUserGroup.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RestUserGroup
    ezpublish_rest.output.value_object_visitor.CreatedUserGroup.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedUserGroup
    ezpublish_rest.output.value_object_visitor.UserGroupList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\UserGroupList
    ezpublish_rest.output.value_object_visitor.UserGroupRefList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\UserGroupRefList

    # User
    ezpublish_rest.output.value_object_visitor.UserList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\UserList
    ezpublish_rest.output.value_object_visitor.UserRefList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\UserRefList
    ezpublish_rest.output.value_object_visitor.CreatedUser.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedUser
    ezpublish_rest.output.value_object_visitor.RestUser.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RestUser
    ezpublish_rest.output.value_object_visitor.UserSession.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\UserSession
    ezpublish_rest.output.value_object_visitor.UserSessionDeleted.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\DeletedUserSession

    # ContentType
    ezpublish_rest.output.value_object_visitor.RestContentType.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RestContentType
    ezpublish_rest.output.value_object_visitor.CreatedContentType.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedContentType
    ezpublish_rest.output.value_object_visitor.ContentTypeCreateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\ContentTypeCreateStruct

    # Object state
    ezpublish_rest.output.value_object_visitor.ObjectStateList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\ObjectStateList
    ezpublish_rest.output.value_object_visitor.CreatedObjectState.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedObjectState
    ezpublish_rest.output.value_object_visitor.RestObjectState.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RestObjectState
    ezpublish_rest.output.value_object_visitor.ObjectStateGroupList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\ObjectStateGroupList
    ezpublish_rest.output.value_object_visitor.CreatedObjectStateGroup.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedObjectStateGroup
    ezpublish_rest.output.value_object_visitor.ObjectStateGroup.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\ObjectStateGroup
    ezpublish_rest.output.value_object_visitor.ObjectStateCreateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\ObjectStateCreateStruct
    ezpublish_rest.output.value_object_visitor.ObjectStateUpdateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\ObjectStateUpdateStruct
    ezpublish_rest.output.value_object_visitor.ObjectStateGroupCreateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\ObjectStateGroupCreateStruct
    ezpublish_rest.output.value_object_visitor.ObjectStateGroupUpdateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\ObjectStateGroupUpdateStruct

    # View
    ezpublish_rest.output.value_object_visitor.RestExecutedView.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RestExecutedView

    # Trash
    ezpublish_rest.output.value_object_visitor.RestTrashItem.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RestTrashItem
    ezpublish_rest.output.value_object_visitor.Trash.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\Trash

    # Location
    ezpublish_rest.output.value_object_visitor.LocationList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\LocationList
    ezpublish_rest.output.value_object_visitor.RestLocation.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RestLocation
    ezpublish_rest.output.value_object_visitor.CreatedLocation.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedLocation
    ezpublish_rest.output.value_object_visitor.LocationCreateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\LocationCreateStruct
    ezpublish_rest.output.value_object_visitor.LocationUpdateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\LocationUpdateStruct

    # Roles
    ezpublish_rest.output.value_object_visitor.RestUserGroupRoleAssignment.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RestUserGroupRoleAssignment
    ezpublish_rest.output.value_object_visitor.RestUserRoleAssignment.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RestUserRoleAssignment
    ezpublish_rest.output.value_object_visitor.RoleAssignmentList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RoleAssignmentList
    ezpublish_rest.output.value_object_visitor.PolicyList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\PolicyList
    ezpublish_rest.output.value_object_visitor.CreatedPolicy.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedPolicy
    ezpublish_rest.output.value_object_visitor.Policy.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\Policy
    ezpublish_rest.output.value_object_visitor.Role.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\Role
    ezpublish_rest.output.value_object_visitor.CreatedRole.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedRole
    ezpublish_rest.output.value_object_visitor.RoleList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RoleList
    ezpublish_rest.output.value_object_visitor.RoleCreateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\RoleCreateStruct
    ezpublish_rest.output.value_object_visitor.RoleUpdateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\RoleUpdateStruct
    ezpublish_rest.output.value_object_visitor.RoleAssignment.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\RoleAssignment
    ezpublish_rest.output.value_object_visitor.PolicyCreateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\PolicyCreateStruct
    ezpublish_rest.output.value_object_visitor.PolicyUpdateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\PolicyUpdateStruct

    # Relation
    ezpublish_rest.output.value_object_visitor.CreatedRelation.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedRelation
    ezpublish_rest.output.value_object_visitor.RestRelation.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RestRelation
    ezpublish_rest.output.value_object_visitor.RelationList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RelationList

    # Field Definition
    ezpublish_rest.output.value_object_visitor.RestFieldDefinition.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\RestFieldDefinition
    ezpublish_rest.output.value_object_visitor.CreatedFieldDefinition.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedFieldDefinition
    ezpublish_rest.output.value_object_visitor.FieldDefinitionList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\FieldDefinitionList
    ezpublish_rest.output.value_object_visitor.FieldDefinitionCreateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\FieldDefinitionCreateStruct

    # Content Type Group
    ezpublish_rest.output.value_object_visitor.ContentTypeGroupList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\ContentTypeGroupList
    ezpublish_rest.output.value_object_visitor.CreatedContentTypeGroup.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CreatedContentTypeGroup
    ezpublish_rest.output.value_object_visitor.ContentTypeGroup.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\ContentTypeGroup
    ezpublish_rest.output.value_object_visitor.ContentTypeInfoList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\ContentTypeInfoList
    ezpublish_rest.output.value_object_visitor.ContentTypeList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\ContentTypeList
    ezpublish_rest.output.value_object_visitor.ContentTypeGroupRefList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\ContentTypeGroupRefList
    ezpublish_rest.output.value_object_visitor.ContentTypeGroupCreateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\ContentTypeGroupCreateStruct
    ezpublish_rest.output.value_object_visitor.ContentTypeGroupUpdateStruct.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\ContentTypeGroupUpdateStruct

    # HTTP
    ezpublish_rest.output.value_object_visitor.Conflict.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\Conflict
    ezpublish_rest.output.value_object_visitor.SeeOther.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\SeeOther
    ezpublish_rest.output.value_object_visitor.Root.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\Root
    ezpublish_rest.output.value_object_visitor.NoContent.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\NoContent
    ezpublish_rest.output.value_object_visitor.ResourceCreated.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\ResourceCreated
    ezpublish_rest.output.value_object_visitor.PermanentRedirect.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\PermanentRedirect
    ezpublish_rest.output.value_object_visitor.TemporaryRedirect.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\TemporaryRedirect
    ezpublish_rest.output.value_object_visitor.Options.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\Options

    # Cache
    ezpublish_rest.output.value_object_visitor.cached_value.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CachedValue

    # Services
    ezpublish_rest.output.value_object_visitor.CountryList.class: eZ\Publish\Core\REST\Server\Output\ValueObjectVisitor\CountryList

    # Limitation
    ezpublish_rest.output.value_object_visitor.Limitation.class: eZ\Publish\Core\REST\Client\Output\ValueObjectVisitor\Limitation

services:
    ezpublish_rest.output.value_object_visitor.base:
        class: %ezpublish_rest.output.value_object_visitor.base.class%
        calls:
            - [ setRequestParser, [ @ezpublish_rest.request_parser ] ]
            - [ setRouter, [ @router ] ]
            - [ setTemplateRouter, [ @ezpublish_rest.templated_router] ]

    # Errors
    ezpublish_rest.output.value_object_visitor.InvalidArgumentException:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.InvalidArgumentException.class%
        arguments: [ true  ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Exceptions\InvalidArgumentException }

    ezpublish_rest.output.value_object_visitor.NotFoundException:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.NotFoundException.class%
        arguments: [ true  ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Exceptions\NotFoundException }

    ezpublish_rest.output.value_object_visitor.UnauthorizedException:
        parent: ezpublish_rest.output.value_object_visitor.base
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.UnauthorizedException.class%
        arguments: [ true  ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Exceptions\UnauthorizedException }

    ezpublish_rest.output.value_object_visitor.BadStateException:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.BadStateException.class%
        arguments: [ true  ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Exceptions\BadStateException }

    ezpublish_rest.output.value_object_visitor.BadRequestException:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.BadRequestException.class%
        arguments: [ true  ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Exceptions\BadRequestException }
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Common\Exceptions\Parser }

    ezpublish_rest.output.value_object_visitor.ForbiddenException:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ForbiddenException.class%
        arguments: [ true  ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Exceptions\ForbiddenException }

    ezpublish_rest.output.value_object_visitor.NotImplementedException:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.NotImplementedException.class%
        arguments: [ true  ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Exceptions\NotImplementedException }

    ezpublish_rest.output.value_object_visitor.Exception:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.Exception.class%
        arguments: [ true  ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: Exception }

    # Section
    ezpublish_rest.output.value_object_visitor.SectionList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.SectionList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\SectionList }

    ezpublish_rest.output.value_object_visitor.CreatedSection:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedSection.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedSection }

    ezpublish_rest.output.value_object_visitor.Section:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.Section.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\Content\Section }

    ezpublish_rest.output.value_object_visitor.SectionCreateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.SectionCreateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\Content\SectionCreateStruct }

    ezpublish_rest.output.value_object_visitor.SectionUpdateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.SectionUpdateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\Content\SectionUpdateStruct }

    # URLWildcard
    ezpublish_rest.output.value_object_visitor.URLWildcardList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.URLWildcardList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\URLWildcardList }

    ezpublish_rest.output.value_object_visitor.URLWildcard:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.URLWildcard.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\Content\URLWildcard }

    ezpublish_rest.output.value_object_visitor.CreatedURLWildcard:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedURLWildcard.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedURLWildcard }

    # URLAlias
    ezpublish_rest.output.value_object_visitor.URLAliasList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.URLAliasList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\URLAliasList }

    ezpublish_rest.output.value_object_visitor.URLAliasRefList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.URLAliasRefList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\URLAliasRefList }

    ezpublish_rest.output.value_object_visitor.URLAlias:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.URLAlias.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\Content\URLAlias }

    ezpublish_rest.output.value_object_visitor.CreatedURLAlias:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedURLAlias.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedURLAlias }

    # Content
    ezpublish_rest.output.value_object_visitor.ContentList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ContentList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\ContentList }

    ezpublish_rest.output.value_object_visitor.RestContent:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RestContent.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\RestContent }

    ezpublish_rest.output.value_object_visitor.CreatedContent:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedContent.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedContent }

    ezpublish_rest.output.value_object_visitor.VersionList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.VersionList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\VersionList }

    ezpublish_rest.output.value_object_visitor.CreatedVersion:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedVersion.class%
        arguments: [ @ezpublish_rest.field_type_serializer ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedVersion }

    ezpublish_rest.output.value_object_visitor.VersionInfo:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.VersionInfo.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\Content\VersionInfo }

    ezpublish_rest.output.value_object_visitor.ImageVariation:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ImageVariation.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\SPI\Variation\Values\ImageVariation }

    ezpublish_rest.output.value_object_visitor.Version:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.Version.class%
        arguments: [ @ezpublish_rest.field_type_serializer  ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\Version }

    # UserGroup
    ezpublish_rest.output.value_object_visitor.RestUserGroup:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RestUserGroup.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\RestUserGroup }

    ezpublish_rest.output.value_object_visitor.CreatedUserGroup:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedUserGroup.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedUserGroup }

    ezpublish_rest.output.value_object_visitor.UserGroupList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.UserGroupList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\UserGroupList }

    ezpublish_rest.output.value_object_visitor.UserGroupRefList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.UserGroupRefList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\UserGroupRefList }

    # User
    ezpublish_rest.output.value_object_visitor.UserList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.UserList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\UserList }

    ezpublish_rest.output.value_object_visitor.UserRefList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.UserRefList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\UserRefList }

    ezpublish_rest.output.value_object_visitor.CreatedUser:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedUser.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedUser }

    ezpublish_rest.output.value_object_visitor.RestUser:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RestUser.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\RestUser }

    ezpublish_rest.output.value_object_visitor.UserSession:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.UserSession.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\UserSession }

    ezpublish_rest.output.value_object_visitor.UserSessionDeleted:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.UserSessionDeleted.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\DeletedUserSession }

    # ContentType
    ezpublish_rest.output.value_object_visitor.RestContentType:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RestContentType.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\RestContentType }

    ezpublish_rest.output.value_object_visitor.CreatedContentType:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedContentType.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedContentType }

    ezpublish_rest.output.value_object_visitor.ContentTypeList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ContentTypeList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\ContentTypeList }

    ezpublish_rest.output.value_object_visitor.ContentTypeInfoList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ContentTypeInfoList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\ContentTypeInfoList }

    ezpublish_rest.output.value_object_visitor.ContentTypeGroup:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ContentTypeGroup.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\ContentType\ContentTypeGroup }

    ezpublish_rest.output.value_object_visitor.CreatedContentTypeGroup:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedContentTypeGroup.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedContentTypeGroup }

    ezpublish_rest.output.value_object_visitor.ContentTypeGroupList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ContentTypeGroupList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\ContentTypeGroupList }

    ezpublish_rest.output.value_object_visitor.ContentTypeGroupCreateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.contenttypegroupcreatestruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\ContentType\ContentTypeGroupCreateStruct }

    ezpublish_rest.output.value_object_visitor.ContentTypeGroupRefList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ContentTypeGroupRefList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\ContentTypeGroupRefList }

    ezpublish_rest.output.value_object_visitor.FieldDefinitionList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.FieldDefinitionList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\FieldDefinitionList }

    ezpublish_rest.output.value_object_visitor.CreatedFieldDefinition:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedFieldDefinition.class%
        arguments: [ @ezpublish_rest.field_type_serializer  ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedFieldDefinition }

    ezpublish_rest.output.value_object_visitor.RestFieldDefinition:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RestFieldDefinition.class%
        arguments: [ @ezpublish_rest.field_type_serializer  ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\RestFieldDefinition }

    ezpublish_rest.output.value_object_visitor.FieldDefinitionCreateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.FieldDefinitionCreateStruct.class%
        arguments:
            - @ezpublish_rest.field_type_serializer
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\FieldDefinitionCreateStruct }

    ezpublish_rest.output.value_object_visitor.ContentTypeCreateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ContentTypeCreateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Client\Values\ContentType\ContentTypeCreateStruct }

    ezpublish_rest.output.value_object_visitor.ContentTypeGroupCreateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ContentTypeGroupCreateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\ContentType\ContentTypeGroupCreateStruct }

    ezpublish_rest.output.value_object_visitor.ContentTypeGroupUpdateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ContentTypeGroupUpdateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\ContentType\ContentTypeGroupUpdateStruct }

    # Relation
    ezpublish_rest.output.value_object_visitor.RelationList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RelationList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\RelationList }

    ezpublish_rest.output.value_object_visitor.RestRelation:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RestRelation.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\RestRelation }

    ezpublish_rest.output.value_object_visitor.CreatedRelation:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedRelation.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedRelation }

    # Role
    ezpublish_rest.output.value_object_visitor.RoleList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RoleList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\RoleList }

    ezpublish_rest.output.value_object_visitor.CreatedRole:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedRole.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedRole }

    ezpublish_rest.output.value_object_visitor.Role:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.Role.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\User\Role }

    ezpublish_rest.output.value_object_visitor.Policy:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.Policy.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\User\Policy }

    ezpublish_rest.output.value_object_visitor.CreatedPolicy:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedPolicy.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedPolicy }

    ezpublish_rest.output.value_object_visitor.PolicyList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.PolicyList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\PolicyList }

    ezpublish_rest.output.value_object_visitor.RoleAssignmentList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RoleAssignmentList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\RoleAssignmentList }

    ezpublish_rest.output.value_object_visitor.RestUserRoleAssignment:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RestUserRoleAssignment.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\RestUserRoleAssignment }

    ezpublish_rest.output.value_object_visitor.RestUserGroupRoleAssignment:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RestUserGroupRoleAssignment.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\RestUserGroupRoleAssignment }

    ezpublish_rest.output.value_object_visitor.RoleCreateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RoleCreateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\REST\Client\Values\User\RoleCreateStruct }

    ezpublish_rest.output.value_object_visitor.RoleUpdateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RoleUpdateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\REST\Client\Values\User\RoleUpdateStruct }

    ezpublish_rest.output.value_object_visitor.RoleAssignment:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RoleAssignment.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\REST\Client\Values\User\RoleAssignment }

    ezpublish_rest.output.value_object_visitor.PolicyCreateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.PolicyCreateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\REST\Client\Values\User\PolicyCreateStruct }

    ezpublish_rest.output.value_object_visitor.PolicyUpdateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.PolicyUpdateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\REST\Client\Values\User\PolicyUpdateStruct }

    ezpublish_rest.output.value_object_visitor.Limitation:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.Limitation.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\User\Limitation }

    # Location
    ezpublish_rest.output.value_object_visitor.CreatedLocation:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedLocation.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedLocation }

    ezpublish_rest.output.value_object_visitor.RestLocation:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RestLocation.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\RestLocation }

    ezpublish_rest.output.value_object_visitor.LocationList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.LocationList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\LocationList }

    ezpublish_rest.output.value_object_visitor.LocationCreateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.LocationCreateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\Content\LocationCreateStruct }

    ezpublish_rest.output.value_object_visitor.LocationUpdateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.LocationUpdateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\Content\LocationUpdateStruct }

    # Trash
    ezpublish_rest.output.value_object_visitor.Trash:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.Trash.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\Trash }

    ezpublish_rest.output.value_object_visitor.RestTrashItem:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RestTrashItem.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\RestTrashItem }

    # Views
    ezpublish_rest.output.value_object_visitor.RestExecutedView:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RestExecutedView.class%
        arguments: [ @ezpublish.api.service.location, @ezpublish.api.service.content, @ezpublish.api.service.content_type ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\RestExecutedView }

    # Object state
    ezpublish_rest.output.value_object_visitor.ObjectStateGroup:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ObjectStateGroup.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\ObjectState\ObjectStateGroup }

    ezpublish_rest.output.value_object_visitor.CreatedObjectStateGroup:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedObjectStateGroup.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedObjectStateGroup }

    ezpublish_rest.output.value_object_visitor.ObjectStateGroupList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ObjectStateGroupList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\ObjectStateGroupList }

    ezpublish_rest.output.value_object_visitor.RestObjectState:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.RestObjectState.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Common\Values\RestObjectState }

    ezpublish_rest.output.value_object_visitor.CreatedObjectState:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CreatedObjectState.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CreatedObjectState }

    ezpublish_rest.output.value_object_visitor.ObjectStateList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ObjectStateList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\ObjectStateList }

    ezpublish_rest.output.value_object_visitor.ContentObjectStates:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ContentObjectStates.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Common\Values\ContentObjectStates }

    ezpublish_rest.output.value_object_visitor.ObjectStateCreateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ObjectStateCreateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\ObjectState\ObjectStateCreateStruct }

    ezpublish_rest.output.value_object_visitor.ObjectStateUpdateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ObjectStateUpdateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\ObjectState\ObjectStateUpdateStruct }

    ezpublish_rest.output.value_object_visitor.ObjectStateGroupCreateStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ObjectStateGroupCreateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\ObjectState\ObjectStateGroupCreateStruct }

    ezpublish_rest.output.value_object_visitor.ObjectStateGroupUpdataStruct:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ObjectStateGroupUpdateStruct.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\API\Repository\Values\ObjectState\ObjectStateGroupUpdataStruct }

    # Services
    ezpublish_rest.output.value_object_visitor.CountryList:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.CountryList.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CountryList}

    # REST specific
    ezpublish_rest.output.value_object_visitor.TemporaryRedirect:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.TemporaryRedirect.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\TemporaryRedirect }

    ezpublish_rest.output.value_object_visitor.PermanentRedirect:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.PermanentRedirect.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\PermanentRedirect }

    ezpublish_rest.output.value_object_visitor.ResourceCreated:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.ResourceCreated.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\ResourceCreated }

    ezpublish_rest.output.value_object_visitor.NoContent:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.NoContent.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\NoContent }

    ezpublish_rest.output.value_object_visitor.Root:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.Root.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Common\Values\Root }

    ezpublish_rest.output.value_object_visitor.SeeOther:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.SeeOther.class%
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\SeeOther }

    ezpublish_rest.output.value_object_visitor.Conflict:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.Conflict.class%
        arguments: [ true  ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\Conflict }

    ezpublish_rest.output.value_object_visitor.Options:
        parent: ezpublish_rest.output.value_object_visitor.base
        class: %ezpublish_rest.output.value_object_visitor.Options.class%
        arguments: [ true  ]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\Options }

    ezpublish_rest.output.value_object_visitor.cached_value:
        class: %ezpublish_rest.output.value_object_visitor.cached_value.class%
        parent: ezpublish_rest.output.value_object_visitor.base
        arguments:
            - @ezpublish.config.resolver
        calls:
            - [setRequest, [@?request=]]
        tags:
            - { name: ezpublish_rest.output.value_object_visitor, type: eZ\Publish\Core\REST\Server\Values\CachedValue }
