Skip to content

Commit b120aa8

Browse files
committed
review
1 parent 0a5b7d3 commit b120aa8

File tree

2 files changed

+37
-54
lines changed

2 files changed

+37
-54
lines changed

crates/matrix-sdk/src/widget/machine/from_widget.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,13 @@
1515
use ruma::{
1616
api::client::{
1717
delayed_events::{delayed_message_event, delayed_state_event, update_delayed_event},
18-
error::ErrorBody,
18+
error::{ErrorBody, StandardErrorBody},
1919
},
2020
events::{AnyTimelineEvent, MessageLikeEventType, StateEventType},
2121
serde::Raw,
2222
OwnedEventId, OwnedRoomId,
2323
};
2424
use serde::{Deserialize, Serialize};
25-
use serde_json::{json, Value};
2625

2726
use super::{SendEventRequest, UpdateDelayedEventRequest};
2827
use crate::{widget::StateKeySelector, Error, HttpError};
@@ -54,15 +53,16 @@ impl FromWidgetErrorResponse {
5453
Self {
5554
error: FromWidgetError {
5655
message: error.to_string(),
57-
matrix_api_error: error.as_client_api_error().and_then(
58-
|api_error| match &api_error.body {
59-
ErrorBody::Standard { kind, message } => Some(FromWidgetMatrixErrorBody {
60-
http_status: api_error.status_code.as_u16().into(),
61-
response: json!({"errcode": kind.to_string(), "error": message }),
62-
}),
63-
_ => None,
64-
},
65-
),
56+
matrix_api_error: error.as_client_api_error().and_then(|api_error| match api_error
57+
.body
58+
.clone()
59+
{
60+
ErrorBody::Standard { kind, message } => Some(FromWidgetMatrixErrorBody {
61+
http_status: api_error.status_code.as_u16().into(),
62+
response: StandardErrorBody { kind, message },
63+
}),
64+
_ => None,
65+
}),
6666
},
6767
}
6868
}
@@ -83,7 +83,7 @@ impl FromWidgetErrorResponse {
8383
}
8484

8585
/// The serializable section of an error response send by the client as a
86-
/// response to a from widget request.
86+
/// response to a [`FromWidgetRequest`].
8787
#[derive(Serialize)]
8888
struct FromWidgetError {
8989
/// A unspecified error message text that caused this widget action to fail.
@@ -103,7 +103,7 @@ struct FromWidgetMatrixErrorBody {
103103
http_status: u32,
104104
/// The matrix standard error response including the `errorcode` and the
105105
/// `error` message as defined in the spec: https://spec.matrix.org/v1.12/client-server-api/#standard-error-response
106-
response: Value,
106+
response: StandardErrorBody,
107107
}
108108

109109
/// The serializable section of a widget response containing the supported

crates/matrix-sdk/src/widget/machine/mod.rs

Lines changed: 24 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ impl WidgetMachine {
214214
let request = match raw_request.deserialize() {
215215
Ok(r) => r,
216216
Err(e) => {
217-
return vec![Self::send_from_widget_error_response(
217+
return vec![Self::send_from_widget_response(
218218
raw_request,
219219
FromWidgetErrorResponse::from_error(&crate::Error::SerdeJson(e)),
220220
)]
@@ -270,14 +270,14 @@ impl WidgetMachine {
270270
let CapabilitiesState::Negotiated(capabilities) = &self.capabilities else {
271271
let text =
272272
"Received send update delayed event request before capabilities were negotiated";
273-
return vec![Self::send_from_widget_error_response(
273+
return vec![Self::send_from_widget_response(
274274
raw_request,
275275
FromWidgetErrorResponse::from_string(text),
276276
)];
277277
};
278278

279279
if !capabilities.update_delayed_event {
280-
return vec![Self::send_from_widget_error_response(
280+
return vec![Self::send_from_widget_response(
281281
raw_request,
282282
FromWidgetErrorResponse::from_string(format!(
283283
"Not allowed: missing the {UPDATE_DELAYED_EVENT} capability."
@@ -291,7 +291,7 @@ impl WidgetMachine {
291291
delay_id: req.delay_id,
292292
});
293293
request.then(|result, _machine| {
294-
vec![Self::send_from_widget_result_response(
294+
vec![Self::send_from_widget_response(
295295
raw_request,
296296
// This is mapped to another type because the update_delay_event::Response
297297
// does not impl Serialize
@@ -314,7 +314,7 @@ impl WidgetMachine {
314314
) -> Option<Action> {
315315
let CapabilitiesState::Negotiated(capabilities) = &self.capabilities else {
316316
let text = "Received read event request before capabilities were negotiated";
317-
return Some(Self::send_from_widget_error_response(
317+
return Some(Self::send_from_widget_response(
318318
raw_request,
319319
FromWidgetErrorResponse::from_string(text),
320320
));
@@ -324,7 +324,7 @@ impl WidgetMachine {
324324
ReadEventRequest::ReadMessageLikeEvent { event_type, limit } => {
325325
if !capabilities.read.iter().any(|f| f.matches_message_like_event_type(&event_type))
326326
{
327-
return Some(Self::send_from_widget_error_response(
327+
return Some(Self::send_from_widget_response(
328328
raw_request,
329329
FromWidgetErrorResponse::from_string(
330330
"Not allowed to read message like event",
@@ -339,24 +339,24 @@ impl WidgetMachine {
339339
let (request, action) = self.send_matrix_driver_request(request);
340340

341341
request.then(|result, machine| {
342-
let response = match (result, &machine.capabilities) {
343-
(Ok(mut events), CapabilitiesState::Negotiated(capabilities)) => {
344-
events.retain(|e| capabilities.raw_event_matches_read_filter(e));
345-
Ok(ReadEventResponse { events })
346-
}
347-
(Ok(_), CapabilitiesState::Unset) => {
348-
Err(FromWidgetErrorResponse::from_string(
349-
"Received read event request before capabilities negotiation",
350-
))
351-
}
352-
(Ok(_), CapabilitiesState::Negotiating) => {
342+
let response = match &machine.capabilities {
343+
CapabilitiesState::Unset => Err(FromWidgetErrorResponse::from_string(
344+
"Received read event request before capabilities negotiation",
345+
)),
346+
CapabilitiesState::Negotiating => {
353347
Err(FromWidgetErrorResponse::from_string(
354348
"Received read event request while capabilities were negotiating",
355349
))
356350
}
357-
(Err(e), _) => Err(FromWidgetErrorResponse::from_error(&e)),
351+
CapabilitiesState::Negotiated(capabilities) => result
352+
.map(|mut events| {
353+
events.retain(|e| capabilities.raw_event_matches_read_filter(e));
354+
ReadEventResponse { events }
355+
})
356+
.map_err(|e| FromWidgetErrorResponse::from_error(&e)),
358357
};
359-
vec![Self::send_from_widget_result_response(raw_request, response)]
358+
359+
vec![Self::send_from_widget_response(raw_request, response)]
360360
});
361361

362362
action
@@ -388,11 +388,11 @@ impl WidgetMachine {
388388
let response = result
389389
.map(|events| ReadEventResponse { events })
390390
.map_err(|e| FromWidgetErrorResponse::from_error(&e));
391-
vec![Self::send_from_widget_result_response(raw_request, response)]
391+
vec![Self::send_from_widget_response(raw_request, response)]
392392
});
393393
action
394394
} else {
395-
Some(Self::send_from_widget_error_response(
395+
Some(Self::send_from_widget_response(
396396
raw_request,
397397
FromWidgetErrorResponse::from_string("Not allowed to read state event"),
398398
))
@@ -423,7 +423,7 @@ impl WidgetMachine {
423423
};
424424

425425
if !capabilities.send_delayed_event && request.delay.is_some() {
426-
return Some(Self::send_from_widget_error_response(
426+
return Some(Self::send_from_widget_response(
427427
raw_request,
428428
FromWidgetErrorResponse::from_string(format!(
429429
"Not allowed: missing the {SEND_DELAYED_EVENT} capability."
@@ -432,7 +432,7 @@ impl WidgetMachine {
432432
}
433433

434434
if !capabilities.send.iter().any(|filter| filter.matches(&filter_in)) {
435-
return Some(Self::send_from_widget_error_response(
435+
return Some(Self::send_from_widget_response(
436436
raw_request,
437437
FromWidgetErrorResponse::from_string("Not allowed to send event"),
438438
));
@@ -444,7 +444,7 @@ impl WidgetMachine {
444444
if let Ok(r) = result.as_mut() {
445445
r.set_room_id(machine.room_id.clone());
446446
}
447-
vec![Self::send_from_widget_result_response(
447+
vec![Self::send_from_widget_response(
448448
raw_request,
449449
result.map_err(|e| FromWidgetErrorResponse::from_error(&e)),
450450
)]
@@ -523,23 +523,6 @@ impl WidgetMachine {
523523
Action::SendToWidget(serialized)
524524
}
525525

526-
fn send_from_widget_error_response(
527-
raw_request: Raw<FromWidgetRequest>,
528-
error: FromWidgetErrorResponse,
529-
) -> Action {
530-
Self::send_from_widget_response(raw_request, error)
531-
}
532-
533-
fn send_from_widget_result_response(
534-
raw_request: Raw<FromWidgetRequest>,
535-
result: Result<impl Serialize, FromWidgetErrorResponse>,
536-
) -> Action {
537-
match result {
538-
Ok(res) => Self::send_from_widget_response(raw_request, res),
539-
Err(msg) => Self::send_from_widget_error_response(raw_request, msg),
540-
}
541-
}
542-
543526
#[instrument(skip_all, fields(action = T::ACTION))]
544527
fn send_to_widget_request<T: ToWidgetRequest>(
545528
&mut self,

0 commit comments

Comments
 (0)