pub struct Handler<Service> { /* private fields */ }tower only.Expand description
イベントハンドラです。
§Example
use std::convert::Infallible;
use tower::service_fn;
use traq_bot_http::{payloads, RequestParser};
async fn on_ping((state, payload): (i32, payloads::PingPayload)) -> Result<(), Infallible> {
println!("state: {state:?}, ping: {payload:?}");
// assert_eq!(state, 0);
Ok(())
}
let parser = RequestParser::new("verification_token");
let handler = parser
.into_handler()
.on_ping(service_fn(on_ping))
.with_state(0i32);§Composing Handler
Handler はメソッドチェーンにより構成されます。使用可能なメソッドは以下の通りです。
.on_*<S>(S)*にはEventKindの variant がsnake_caseで入ります。- 例:
Handler::on_message_created
.with_state<S>(S)
適切に構成された Handler は Service trait を実装します。各メソッドのドキュメントを参照してください。
Handler の構成時にはコンパイルエラーが出ない可能性があります 。
Service trait を使用するライブラリ (axum 等) の条件も確認してください。
§Note
この構造体の型パラメータは unstable です。Handler<T>におけるTは予告なく変化する可能性があります。
Implementations§
Source§impl<Service> Handler<Service>
impl<Service> Handler<Service>
Sourcepub fn with_state<State>(
self,
state: State,
) -> Handler<WithState<State, Service>>
pub fn with_state<State>( self, state: State, ) -> Handler<WithState<State, Service>>
イベントハンドラにStateを追加します。Stateは以下の条件を満たす必要があります。
Cloneを実装している
§Example
use std::convert::Infallible;
use tower::service_fn;
use traq_bot_http::{payloads, RequestParser};
async fn on_ping(state: i32, payload: payloads::PingPayload) -> Result<(), Infallible> {
println!("state: {state}, payload: {payload:?}");
Ok(())
}
let parser = RequestParser::new("verification_token");
let handler = parser
.into_handler()
// これはinvalidです; with_stateはstateを使用するハンドラより後に置く必要があります
// .with_state(0)
.on_ping(service_fn(|(state, payload)| on_ping(state, payload)))
.with_state(0);Source§impl<Service1> Handler<Service1>
impl<Service1> Handler<Service1>
Sourcepub fn on_ping<Service2, Req>(
self,
service: Service2,
) -> Handler<OnPing<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_ping<Service2, Req>(
self,
service: Service2,
) -> Handler<OnPing<Service2, Service1, Req>>where
Service2: Service<Req>,
PingPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいPingPayload(PingPayload,)(State, PingPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_joined<Service2, Req>(
self,
service: Service2,
) -> Handler<OnJoined<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_joined<Service2, Req>(
self,
service: Service2,
) -> Handler<OnJoined<Service2, Service1, Req>>where
Service2: Service<Req>,
JoinedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいJoinedPayload(JoinedPayload,)(State, JoinedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_left<Service2, Req>(
self,
service: Service2,
) -> Handler<OnLeft<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_left<Service2, Req>(
self,
service: Service2,
) -> Handler<OnLeft<Service2, Service1, Req>>where
Service2: Service<Req>,
LeftPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいLeftPayload(LeftPayload,)(State, LeftPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_message_created<Service2, Req>(
self,
service: Service2,
) -> Handler<OnMessageCreated<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_message_created<Service2, Req>(
self,
service: Service2,
) -> Handler<OnMessageCreated<Service2, Service1, Req>>where
Service2: Service<Req>,
MessageCreatedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいMessageCreatedPayload(MessageCreatedPayload,)(State, MessageCreatedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_message_deleted<Service2, Req>(
self,
service: Service2,
) -> Handler<OnMessageDeleted<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_message_deleted<Service2, Req>(
self,
service: Service2,
) -> Handler<OnMessageDeleted<Service2, Service1, Req>>where
Service2: Service<Req>,
MessageDeletedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいMessageDeletedPayload(MessageDeletedPayload,)(State, MessageDeletedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_message_updated<Service2, Req>(
self,
service: Service2,
) -> Handler<OnMessageUpdated<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_message_updated<Service2, Req>(
self,
service: Service2,
) -> Handler<OnMessageUpdated<Service2, Service1, Req>>where
Service2: Service<Req>,
MessageUpdatedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいMessageUpdatedPayload(MessageUpdatedPayload,)(State, MessageUpdatedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_direct_message_created<Service2, Req>(
self,
service: Service2,
) -> Handler<OnDirectMessageCreated<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_direct_message_created<Service2, Req>(
self,
service: Service2,
) -> Handler<OnDirectMessageCreated<Service2, Service1, Req>>where
Service2: Service<Req>,
DirectMessageCreatedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいDirectMessageCreatedPayload(DirectMessageCreatedPayload,)(State, DirectMessageCreatedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_direct_message_deleted<Service2, Req>(
self,
service: Service2,
) -> Handler<OnDirectMessageDeleted<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_direct_message_deleted<Service2, Req>(
self,
service: Service2,
) -> Handler<OnDirectMessageDeleted<Service2, Service1, Req>>where
Service2: Service<Req>,
DirectMessageDeletedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいDirectMessageDeletedPayload(DirectMessageDeletedPayload,)(State, DirectMessageDeletedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_direct_message_updated<Service2, Req>(
self,
service: Service2,
) -> Handler<OnDirectMessageUpdated<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_direct_message_updated<Service2, Req>(
self,
service: Service2,
) -> Handler<OnDirectMessageUpdated<Service2, Service1, Req>>where
Service2: Service<Req>,
DirectMessageUpdatedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいDirectMessageUpdatedPayload(DirectMessageUpdatedPayload,)(State, DirectMessageUpdatedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_bot_message_stamps_updated<Service2, Req>(
self,
service: Service2,
) -> Handler<OnBotMessageStampsUpdated<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_bot_message_stamps_updated<Service2, Req>(
self,
service: Service2,
) -> Handler<OnBotMessageStampsUpdated<Service2, Service1, Req>>where
Service2: Service<Req>,
BotMessageStampsUpdatedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいBotMessageStampsUpdatedPayload(BotMessageStampsUpdatedPayload,)(State, BotMessageStampsUpdatedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_channel_created<Service2, Req>(
self,
service: Service2,
) -> Handler<OnChannelCreated<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_channel_created<Service2, Req>(
self,
service: Service2,
) -> Handler<OnChannelCreated<Service2, Service1, Req>>where
Service2: Service<Req>,
ChannelCreatedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいChannelCreatedPayload(ChannelCreatedPayload,)(State, ChannelCreatedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_channel_topic_changed<Service2, Req>(
self,
service: Service2,
) -> Handler<OnChannelTopicChanged<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_channel_topic_changed<Service2, Req>(
self,
service: Service2,
) -> Handler<OnChannelTopicChanged<Service2, Service1, Req>>where
Service2: Service<Req>,
ChannelTopicChangedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいChannelTopicChangedPayload(ChannelTopicChangedPayload,)(State, ChannelTopicChangedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_user_created<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserCreated<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_user_created<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserCreated<Service2, Service1, Req>>where
Service2: Service<Req>,
UserCreatedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいUserCreatedPayload(UserCreatedPayload,)(State, UserCreatedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_stamp_created<Service2, Req>(
self,
service: Service2,
) -> Handler<OnStampCreated<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_stamp_created<Service2, Req>(
self,
service: Service2,
) -> Handler<OnStampCreated<Service2, Service1, Req>>where
Service2: Service<Req>,
StampCreatedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいStampCreatedPayload(StampCreatedPayload,)(State, StampCreatedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_tag_added<Service2, Req>(
self,
service: Service2,
) -> Handler<OnTagAdded<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_tag_added<Service2, Req>(
self,
service: Service2,
) -> Handler<OnTagAdded<Service2, Service1, Req>>where
Service2: Service<Req>,
TagAddedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいTagAddedPayload(TagAddedPayload,)(State, TagAddedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_tag_removed<Service2, Req>(
self,
service: Service2,
) -> Handler<OnTagRemoved<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_tag_removed<Service2, Req>(
self,
service: Service2,
) -> Handler<OnTagRemoved<Service2, Service1, Req>>where
Service2: Service<Req>,
TagRemovedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいTagRemovedPayload(TagRemovedPayload,)(State, TagRemovedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_user_group_created<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupCreated<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_user_group_created<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupCreated<Service2, Service1, Req>>where
Service2: Service<Req>,
UserGroupCreatedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいUserGroupCreatedPayload(UserGroupCreatedPayload,)(State, UserGroupCreatedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_user_group_updated<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupUpdated<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_user_group_updated<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupUpdated<Service2, Service1, Req>>where
Service2: Service<Req>,
UserGroupUpdatedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいUserGroupUpdatedPayload(UserGroupUpdatedPayload,)(State, UserGroupUpdatedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_user_group_deleted<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupDeleted<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_user_group_deleted<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupDeleted<Service2, Service1, Req>>where
Service2: Service<Req>,
UserGroupDeletedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいUserGroupDeletedPayload(UserGroupDeletedPayload,)(State, UserGroupDeletedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_user_group_member_added<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupMemberAdded<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_user_group_member_added<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupMemberAdded<Service2, Service1, Req>>where
Service2: Service<Req>,
UserGroupMemberAddedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいUserGroupMemberAddedPayload(UserGroupMemberAddedPayload,)(State, UserGroupMemberAddedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_user_group_member_updated<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupMemberUpdated<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_user_group_member_updated<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupMemberUpdated<Service2, Service1, Req>>where
Service2: Service<Req>,
UserGroupMemberUpdatedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいUserGroupMemberUpdatedPayload(UserGroupMemberUpdatedPayload,)(State, UserGroupMemberUpdatedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_user_group_member_removed<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupMemberRemoved<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_user_group_member_removed<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupMemberRemoved<Service2, Service1, Req>>where
Service2: Service<Req>,
UserGroupMemberRemovedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいUserGroupMemberRemovedPayload(UserGroupMemberRemovedPayload,)(State, UserGroupMemberRemovedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_user_group_admin_added<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupAdminAdded<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_user_group_admin_added<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupAdminAdded<Service2, Service1, Req>>where
Service2: Service<Req>,
UserGroupAdminAddedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいUserGroupAdminAddedPayload(UserGroupAdminAddedPayload,)(State, UserGroupAdminAddedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している
Sourcepub fn on_user_group_admin_removed<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupAdminRemoved<Service2, Service1, Req>>where
Service2: Service<Req>,
pub fn on_user_group_admin_removed<Service2, Req>(
self,
service: Service2,
) -> Handler<OnUserGroupAdminRemoved<Service2, Service1, Req>>where
Service2: Service<Req>,
UserGroupAdminRemovedPayloadをhandleするServiceを登録します。
引数の型Service2はService<Req> traitを実装し、さらに以下の条件を満たす必要があります。
Cloneを実装しているReqが次のうちいずれかと等しいUserGroupAdminRemovedPayload(UserGroupAdminRemovedPayload,)(State, UserGroupAdminRemovedPayload)(Stateに関してはHandler::with_stateを参照してください)
Service2::Responseが()と等しいService2::ErrorがInto<Box<dyn Error + Send + Sync + 'static>>を実装している