pub mod unstable {
use ruma_common::{
api::{auth_scheme::AccessToken, request, response},
metadata,
serde::StringEnum,
};
use crate::PrivOwnedStr;
metadata! {
method: POST,
rate_limited: true,
authentication: AccessToken,
history: {
unstable("org.matrix.msc4140") => "/_matrix/client/unstable/org.matrix.msc4140/delayed_events/{delay_id}",
}
}
#[derive(Clone, StringEnum)]
#[ruma_enum(rename_all = "lowercase")]
#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
pub enum UpdateAction {
Restart,
Send,
Cancel,
#[doc(hidden)]
_Custom(PrivOwnedStr),
}
#[request(error = crate::Error)]
pub struct Request {
#[ruma_api(path)]
pub delay_id: String,
pub action: UpdateAction,
}
impl Request {
pub fn new(delay_id: String, action: UpdateAction) -> Self {
Self { delay_id, action }
}
}
#[response(error = crate::Error)]
pub struct Response {}
impl Response {
pub fn new() -> Self {
Self {}
}
}
#[cfg(all(test, feature = "client"))]
mod tests {
use std::borrow::Cow;
use ruma_common::api::{
MatrixVersion, OutgoingRequest, SupportedVersions, auth_scheme::SendAccessToken,
};
use serde_json::{Value as JsonValue, json};
use super::{Request, UpdateAction};
#[test]
fn serialize_update_delayed_event_request() {
let supported = SupportedVersions {
versions: [MatrixVersion::V1_1].into(),
features: Default::default(),
};
let request: http::Request<Vec<u8>> =
Request::new("1234".to_owned(), UpdateAction::Cancel)
.try_into_http_request(
"https://homeserver.tld",
SendAccessToken::IfRequired("auth_tok"),
Cow::Owned(supported),
)
.unwrap();
let (parts, body) = request.into_parts();
assert_eq!(
"https://homeserver.tld/_matrix/client/unstable/org.matrix.msc4140/delayed_events/1234",
parts.uri.to_string()
);
assert_eq!("POST", parts.method.to_string());
assert_eq!(
json!({"action": "cancel"}),
serde_json::from_str::<JsonValue>(std::str::from_utf8(&body).unwrap()).unwrap()
);
}
}
}