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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(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
(State, UserGroupAdminRemovedPayload)
(State
に関してはHandler::with_state
を参照してください)
Service2::Response
が()
と等しいService2::Error
がInto<Box<dyn Error + Send + Sync + 'static>>
を実装している