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
|
|
|
}
|
|
|
|
}
|