Skip to content

Commit fa56d98

Browse files
committed
feat(crypto-js): Extract RoomMessageRequest.event_type from EventContent.
1 parent 80c9d91 commit fa56d98

File tree

1 file changed

+46
-21
lines changed

1 file changed

+46
-21
lines changed

src/requests.rs

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@ use matrix_sdk_crypto::{
1111
},
1212
OutgoingRequests,
1313
};
14-
use ruma::api::client::keys::{
15-
claim_keys::v3::Request as OriginalKeysClaimRequest,
16-
upload_keys::v3::Request as OriginalKeysUploadRequest,
17-
upload_signatures::v3::Request as OriginalSignatureUploadRequest,
14+
use ruma::{
15+
api::client::keys::{
16+
claim_keys::v3::Request as OriginalKeysClaimRequest,
17+
upload_keys::v3::Request as OriginalKeysUploadRequest,
18+
upload_signatures::v3::Request as OriginalSignatureUploadRequest,
19+
},
20+
events::EventContent,
1821
};
1922
use wasm_bindgen::prelude::*;
2023

@@ -226,7 +229,11 @@ pub struct RoomMessageRequest {
226229
#[wasm_bindgen(readonly)]
227230
pub txn_id: JsString,
228231

229-
/// A JSON-encoded string containing the `content` field of this event.
232+
/// A string representing the type of even from the message's content.
233+
#[wasm_bindgen(readonly)]
234+
pub event_type: JsString,
235+
236+
/// A JSON-encoded string containing the message's content.
230237
#[wasm_bindgen(readonly)]
231238
pub content: JsString,
232239
}
@@ -239,9 +246,10 @@ impl RoomMessageRequest {
239246
id: JsString,
240247
room_id: JsString,
241248
txn_id: JsString,
249+
event_type: JsString,
242250
content: JsString,
243251
) -> RoomMessageRequest {
244-
Self { id: Some(id), room_id, txn_id, content }
252+
Self { id: Some(id), room_id, txn_id, event_type, content }
245253
}
246254

247255
/// Get its request type.
@@ -303,8 +311,8 @@ pub struct SigningKeysUploadRequest {
303311
macro_rules! request {
304312
(
305313
$destination_request:ident from $source_request:ident
306-
$( extracts fields $( $field_name:ident : $field_type:ident ),+ $(,)? )?
307-
$( $( and )? groups fields $( $grouped_field_name:ident ),+ $(,)? )?
314+
$( extracts $( $field_name:ident : $field_type:tt ),+ $(,)? )?
315+
$( $( and )? groups $( $grouped_field_name:ident ),+ $(,)? )?
308316
) => {
309317
impl TryFrom<&$source_request> for $destination_request {
310318
type Error = serde_json::Error;
@@ -338,15 +346,15 @@ macro_rules! request {
338346
(
339347
@__try_from $destination_request:ident from $source_request:ident
340348
(request_id = $request_id:expr, request = $request:expr)
341-
$( extracts [ $( $field_name:ident : $field_type:ident ),* $(,)? ] )?
349+
$( extracts [ $( $field_name:ident : $field_type:tt ),* $(,)? ] )?
342350
$( groups [ $( $grouped_field_name:ident ),* $(,)? ] )?
343351
) => {
344352
{
345353
Ok($destination_request {
346354
id: $request_id,
347355
$(
348356
$(
349-
$field_name: request!(@__field as $field_type (request = $request, field = $field_name)),
357+
$field_name: request!(@__field $field_name : $field_type ; request = $request),
350358
)*
351359
)?
352360
$(
@@ -364,26 +372,43 @@ macro_rules! request {
364372
}
365373
};
366374

367-
( @__field as string (request = $request:expr, field = $field_name:ident) ) => {
375+
( @__field $field_name:ident : $field_type:ident ; request = $request:expr ) => {
376+
request!(@__field_type as $field_type ; request = $request, field_name = $field_name)
377+
};
378+
379+
/*
380+
( @__field $field_name:ident : $field_mapper:block ; request = $request:expr ) => {
381+
{
382+
let mapper = $field_mapper;
383+
mapper($request)
384+
}
385+
};
386+
*/
387+
388+
( @__field_type as string ; request = $request:expr, field_name = $field_name:ident ) => {
368389
$request.$field_name.to_string().into()
369390
};
370391

371-
( @__field as json (request = $request:expr, field = $field_name:ident) ) => {
392+
( @__field_type as json ; request = $request:expr, field_name = $field_name:ident ) => {
372393
serde_json::to_string(&$request.$field_name)?.into()
373-
}
394+
};
395+
396+
( @__field_type as event_type ; request = $request:expr, field_name = $field_name:ident ) => {
397+
$request.content.event_type().to_string().into()
398+
};
374399
}
375400

376401
// Outgoing Requests
377-
request!(KeysUploadRequest from OriginalKeysUploadRequest groups fields device_keys, one_time_keys, fallback_keys);
378-
request!(KeysQueryRequest from OriginalKeysQueryRequest groups fields timeout, device_keys, token);
379-
request!(KeysClaimRequest from OriginalKeysClaimRequest groups fields timeout, one_time_keys);
380-
request!(ToDeviceRequest from OriginalToDeviceRequest extracts fields event_type: string, txn_id: string and groups fields messages);
381-
request!(SignatureUploadRequest from OriginalSignatureUploadRequest groups fields signed_keys);
382-
request!(RoomMessageRequest from OriginalRoomMessageRequest extracts fields room_id: string, txn_id: string, content: json);
383-
request!(KeysBackupRequest from OriginalKeysBackupRequest groups fields rooms);
402+
request!(KeysUploadRequest from OriginalKeysUploadRequest groups device_keys, one_time_keys, fallback_keys);
403+
request!(KeysQueryRequest from OriginalKeysQueryRequest groups timeout, device_keys, token);
404+
request!(KeysClaimRequest from OriginalKeysClaimRequest groups timeout, one_time_keys);
405+
request!(ToDeviceRequest from OriginalToDeviceRequest extracts event_type: string, txn_id: string and groups messages);
406+
request!(SignatureUploadRequest from OriginalSignatureUploadRequest groups signed_keys);
407+
request!(RoomMessageRequest from OriginalRoomMessageRequest extracts room_id: string, txn_id: string, event_type: event_type, content: json);
408+
request!(KeysBackupRequest from OriginalKeysBackupRequest groups rooms);
384409

385410
// Other Requests
386-
request!(SigningKeysUploadRequest from OriginalUploadSigningKeysRequest groups fields master_key, self_signing_key, user_signing_key);
411+
request!(SigningKeysUploadRequest from OriginalUploadSigningKeysRequest groups master_key, self_signing_key, user_signing_key);
387412

388413
// JavaScript has no complex enums like Rust. To return structs of
389414
// different types, we have no choice that hiding everything behind a

0 commit comments

Comments
 (0)