namespace BotPages.Core { /// /// Билдер для удобного создания . /// Мутабельный, но итоговый объект иммутабелен. /// public sealed class PageResultBuilder { private PageNavigate? _navigateTo; private PageMessage? _message; private List? _files; private List? _actions; /// /// Устанавливает текст сообщения. /// public PageResultBuilder WithText(string text, MessageFormat format) => WithText(new PageMessage() { Text = text, Format = format, }); /// /// Устанавливает текст сообщения. /// public PageResultBuilder WithText(string text) => WithText(new PageMessage() { Text = text, Format = MessageFormat.Plain, }); /// /// Устанавливает текст сообщения. /// public PageResultBuilder WithText(PageMessage message) { _message = message; return this; } /// /// Добавляет клавиатуру (набор кнопок). /// public PageResultBuilder WithKeyboard(IEnumerable actions) { _actions = actions?.ToList(); return this; } /// /// Добавляет файлы. /// public PageResultBuilder WithFiles(IEnumerable files) { _files = files?.ToList(); return this; } /// /// Устанавливает навигацию на другую страницу. /// public PageResultBuilder WithNavigate(string pageId, object? args = null, bool replace = true) => WithNavigate(new PageNavigate() { PageId = pageId, Args = args, Replace = replace, }); /// /// Устанавливает навигацию на другую страницу. /// public PageResultBuilder WithNavigate(PageNavigate navigate) { _navigateTo = navigate; return this; } /// /// Собирает итоговый иммутабельный . /// public PageResult Build() => new PageResult { Message = _message, Actions = _actions, Files = _files, NavigateTo = _navigateTo, }; /// /// Создаёт новый пустой билдер. /// public static PageResultBuilder Empty() => new PageResultBuilder(); } }