protected function renderStructure(
        StructureInterface $structure,
        $attributes = [],
        $preview = false,
        $partial = false
    ) {
        // extract format twig file
        if (!$preview) {
            $request = $this->getRequest();
            $requestFormat = $request->getRequestFormat();
        } else {
            $requestFormat = 'html';
        }

        $viewTemplate = $structure->getView() . '.' . $requestFormat . '.twig';

        try {
            // get attributes to render template
            $data = $this->getAttributes($attributes, $structure, $preview);

            // if partial render only content block else full page
            if ($partial) {
                $content = $this->renderBlock(
                    $viewTemplate,
                    'content',
                    $data
                );
            } elseif ($preview) {
                $content = $this->renderPreview(
                    $viewTemplate,
                    $data
                );
            } else {
                $content = $this->renderView(
                    $viewTemplate,
                    $data
                );
            }

            $response = new Response($content);

            if (!$preview && $this->getCacheTimeLifeEnhancer()) {
                $this->getCacheTimeLifeEnhancer()->enhance($response, $structure);
            }

            return $response;
        } catch (InvalidArgumentException $e) {
            // template not found
            throw new HttpException(406, 'Error encountered when rendering content', $e);
        }
    }