use ruma_common::{
api::{request, Metadata},
metadata, OwnedDeviceId,
};
const METADATA: Metadata = metadata! {
method: GET,
rate_limited: false,
authentication: None,
history: {
1.0 => "/_matrix/static/client/login/",
}
};
#[request(error = crate::Error)]
#[derive(Default)]
pub struct Request {
#[ruma_api(query)]
#[serde(skip_serializing_if = "Option::is_none")]
pub device_id: Option<OwnedDeviceId>,
#[ruma_api(query)]
#[serde(skip_serializing_if = "Option::is_none")]
pub initial_device_display_name: Option<String>,
}
impl Request {
pub fn new(
device_id: Option<OwnedDeviceId>,
initial_device_display_name: Option<String>,
) -> Self {
Self { device_id, initial_device_display_name }
}
}
#[derive(Debug, Clone)]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct Response {
pub body: Vec<u8>,
}
impl Response {
pub fn new(body: Vec<u8>) -> Self {
Self { body }
}
}
#[cfg(feature = "server")]
impl ruma_common::api::OutgoingResponse for Response {
fn try_into_http_response<T: Default + bytes::BufMut>(
self,
) -> Result<http::Response<T>, ruma_common::api::error::IntoHttpError> {
Ok(http::Response::builder()
.status(http::StatusCode::OK)
.header(http::header::CONTENT_TYPE, "text/html")
.body(ruma_common::serde::slice_to_buf(&self.body))?)
}
}
#[cfg(feature = "client")]
impl ruma_common::api::IncomingResponse for Response {
type EndpointError = crate::Error;
fn try_from_http_response<T: AsRef<[u8]>>(
response: http::Response<T>,
) -> Result<Self, ruma_common::api::error::FromHttpResponseError<Self::EndpointError>> {
use ruma_common::api::{error::FromHttpResponseError, EndpointError};
if response.status().as_u16() >= 400 {
return Err(FromHttpResponseError::Server(Self::EndpointError::from_http_response(
response,
)));
}
let body = response.into_body().as_ref().to_owned();
Ok(Self { body })
}
}