tgbotlib/src/TgBotLib/Objects/MenuButton.php

55 lines
1.5 KiB
PHP
Raw Normal View History

2023-02-13 21:46:57 -05:00
<?php
2024-10-02 00:18:12 -04:00
namespace TgBotLib\Objects;
2023-02-13 21:46:57 -05:00
2024-10-04 00:45:09 -04:00
use InvalidArgumentException;
use TgBotLib\Enums\Types\MenuButtonType;
2023-02-13 21:46:57 -05:00
use TgBotLib\Interfaces\ObjectTypeInterface;
2024-10-04 00:45:09 -04:00
use TgBotLib\Objects\MenuButton\MenuButtonCommands;
use TgBotLib\Objects\MenuButton\MenuButtonDefault;
use TgBotLib\Objects\MenuButton\MenuButtonWebApp;
2023-02-13 21:46:57 -05:00
2024-10-04 00:45:09 -04:00
abstract class MenuButton implements ObjectTypeInterface
2023-02-13 21:46:57 -05:00
{
2024-10-04 00:45:09 -04:00
protected MenuButtonType $type;
2023-02-13 21:46:57 -05:00
/**
* Type of the button, must be web_app
*
2024-10-04 00:45:09 -04:00
* @return MenuButtonType
2023-02-13 21:46:57 -05:00
*/
2024-10-04 00:45:09 -04:00
public function getType(): MenuButtonType
2023-02-13 21:46:57 -05:00
{
return $this->type;
}
/**
2024-10-04 00:45:09 -04:00
* @inheritDoc
2023-02-13 21:46:57 -05:00
*/
2024-10-04 00:45:09 -04:00
public abstract function toArray(): array;
2023-02-13 21:46:57 -05:00
/**
2024-10-04 00:45:09 -04:00
* @inheritDoc
2023-02-13 21:46:57 -05:00
*/
2024-10-04 00:45:09 -04:00
public static function fromArray(?array $data): ?MenuButton
2023-02-13 21:46:57 -05:00
{
2024-10-04 00:45:09 -04:00
if($data === null)
{
return null;
}
if(!isset($data['type']))
{
throw new InvalidArgumentException('MenuButton expected property type');
}
return match(MenuButtonType::tryFrom($data['type']))
{
MenuButtonType::COMMANDS => MenuButtonCommands::fromArray($data),
MenuButtonType::DEFAULT => MenuButtonDefault::fromArray($data),
MenuButtonType::WEB_APP => MenuButtonWebApp::fromArray($data),
default => throw new InvalidArgumentException('Unexpected MenuButton Type')
};
2023-02-13 21:46:57 -05:00
}
}