<?php
declare(strict_types=1);

namespace Celena\Core\Template;

/**
 * Контракт обработчика тега. Должен быть «чистым» — без побочных эффектов помимо вывода.
 * @method string render(array $params, array $vars, ?string $body = null)
 */
interface TagInterface
{
    /**
     * @param array<string, string> $params параметры тега, как написаны в .tpl ({tag a="b" c="d"})
     * @param array<string, mixed> $vars переменные текущего рендера
     * @param string|null $body для блочных тегов — сырое содержимое между [tag]...[/tag]
     */
    public function render(array $params, array $vars, ?string $body = null): string;
}
