@@ -22,47 +22,37 @@ pub enum TaskRequest {
2222 DbUpdateQuestion ( Request < QuestionModel > ) ,
2323}
2424
25- impl TaskRequest {
26- pub async fn execute (
27- self ,
28- client : & reqwest:: Client ,
29- conn : & DatabaseConnection ,
30- ) -> TaskResponse {
31- match self {
32- TaskRequest :: QuestionDetail ( Request {
33- content : slug,
34- widget_name,
35- request_id,
36- } ) => get_question_details ( request_id, widget_name, slug, client) . await ,
37- TaskRequest :: GetAllQuestionsMap ( Request {
38- widget_name,
39- request_id,
40- ..
41- } ) => get_all_questions ( request_id, widget_name, conn) . await ,
42- TaskRequest :: GetAllTopicTags ( Request {
43- widget_name,
44- request_id,
45- ..
46- } ) => get_all_topic_tags ( request_id, widget_name, conn) . await ,
47- TaskRequest :: GetQuestionEditorData ( Request {
48- request_id,
49- content,
50- widget_name,
51- } ) => get_editor_data ( request_id, widget_name, content, client) . await ,
52- TaskRequest :: CodeRunRequest ( Request {
53- request_id,
54- content,
55- widget_name,
56- } ) => run_or_submit_question ( request_id, widget_name, content, client) . await ,
57- TaskRequest :: DbUpdateQuestion ( Request {
58- request_id,
59- content,
60- widget_name,
61- } ) => update_status_to_accepted ( request_id, widget_name, content, conn) . await ,
25+ macro_rules! impl_task_request {
26+ ( $( ( $var: ident, $f_name: ident) ) ,* ) => {
27+ impl TaskRequest {
28+ pub async fn execute(
29+ self ,
30+ client: & reqwest:: Client ,
31+ conn: & DatabaseConnection ,
32+ ) -> TaskResponse {
33+ match self {
34+ $(
35+ TaskRequest :: $var( Request {
36+ content,
37+ widget_name,
38+ request_id,
39+ } ) => $f_name( request_id, widget_name, content, client, conn) . await ,
40+ ) *
41+ }
42+ }
6243 }
63- }
44+ } ;
6445}
6546
47+ impl_task_request ! (
48+ ( QuestionDetail , get_question_details) ,
49+ ( GetAllQuestionsMap , get_all_questions) ,
50+ ( GetAllTopicTags , get_all_topic_tags) ,
51+ ( GetQuestionEditorData , get_editor_data) ,
52+ ( CodeRunRequest , run_or_submit_question) ,
53+ ( DbUpdateQuestion , update_status_to_accepted)
54+ ) ;
55+
6656#[ derive( Debug ) ]
6757pub struct Response < T > {
6858 pub ( crate ) request_id : String ,
@@ -81,21 +71,31 @@ pub enum TaskResponse {
8171 Error ( Response < String > ) ,
8272}
8373
84- impl TaskResponse {
85- pub fn get_widget_name ( & self ) -> WidgetName {
86- match self {
87- TaskResponse :: QuestionDetail ( Response { widget_name, .. } ) => widget_name,
88- TaskResponse :: GetAllQuestionsMap ( Response { widget_name, .. } ) => widget_name,
89- TaskResponse :: AllTopicTags ( Response { widget_name, .. } ) => widget_name,
90- TaskResponse :: Error ( Response { widget_name, .. } ) => widget_name,
91- TaskResponse :: QuestionEditorData ( Response { widget_name, .. } ) => widget_name,
92- TaskResponse :: RunResponseData ( Response { widget_name, .. } ) => widget_name,
93- TaskResponse :: DbUpdateStatus ( Response { widget_name, .. } ) => widget_name,
74+ macro_rules! impl_task_response {
75+ ( $( $variant: ident) ,* ) => {
76+ impl TaskResponse {
77+ pub fn get_widget_name( & self ) -> WidgetName {
78+ match self {
79+ $(
80+ TaskResponse :: $variant( Response { widget_name, .. } ) => widget_name,
81+ ) *
82+ }
83+ . clone( )
84+ }
9485 }
95- . clone ( )
96- }
86+ } ;
9787}
9888
89+ impl_task_response ! (
90+ QuestionDetail ,
91+ GetAllQuestionsMap ,
92+ AllTopicTags ,
93+ QuestionEditorData ,
94+ RunResponseData ,
95+ DbUpdateStatus ,
96+ Error
97+ ) ;
98+
9999pub type ChannelRequestSender = tokio:: sync:: mpsc:: UnboundedSender < TaskRequest > ;
100100pub type ChannelRequestReceiver = tokio:: sync:: mpsc:: UnboundedReceiver < TaskRequest > ;
101101
0 commit comments