diff --git a/ruma-api-macros/src/api.rs b/ruma-api-macros/src/api.rs index 29180673..bbef4690 100644 --- a/ruma-api-macros/src/api.rs +++ b/ruma-api-macros/src/api.rs @@ -150,20 +150,16 @@ impl ToTokens for Api { |(i, segment)| { let path_var = &segment[1..]; let path_var_ident = Ident::new(path_var, Span::call_site()); - let path_field = self - .request - .path_field(path_var) - .expect("expected request to have path field"); - let ty = &path_field.ty; quote! { #path_var_ident: { + use std::ops::Deref as _; + let segment = path_segments.get(#i).unwrap().as_bytes(); let decoded = ruma_api::exports::percent_encoding::percent_decode(segment) .decode_utf8_lossy(); - #ty::deserialize(decoded.into_deserializer()) - .map_err(|e: ruma_api::exports::serde_json::error::Error| e)? + ruma_api::exports::serde_json::from_str(decoded.deref())? } } }, @@ -359,7 +355,7 @@ impl ToTokens for Api { let response_doc = format!("Data in the response from the `{}` API endpoint.", name); let api = quote! { - use ruma_api::exports::serde::de::{Error as _, IntoDeserializer as _}; + use ruma_api::exports::serde::de::Error as _; use ruma_api::exports::serde::Deserialize as _; use ruma_api::Endpoint as _; diff --git a/ruma-api-macros/src/api/request.rs b/ruma-api-macros/src/api/request.rs index d4c02d06..0f4e4f19 100644 --- a/ruma-api-macros/src/api/request.rs +++ b/ruma-api-macros/src/api/request.rs @@ -106,13 +106,6 @@ impl Request { self.fields.iter().filter(|field| field.is_path()).count() } - /// Gets the path field with the given name. - pub fn path_field(&self, name: &str) -> Option<&Field> { - self.fields.iter().flat_map(|f| f.field_of_kind(RequestFieldKind::Path)).find(|field| { - field.ident.as_ref().expect("expected field to have an identifier") == name - }) - } - /// Returns the body field. pub fn newtype_body_field(&self) -> Option<&Field> { self.fields.iter().find_map(RequestField::as_newtype_body_field) diff --git a/src/lib.rs b/src/lib.rs index 132581cd..e2089c27 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -347,11 +347,11 @@ pub struct Metadata { mod tests { /// PUT /_matrix/client/r0/directory/room/:room_alias pub mod create { - use std::convert::TryFrom; + use std::{convert::TryFrom, ops::Deref}; use http::{header::CONTENT_TYPE, method::Method}; use ruma_identifiers::{RoomAliasId, RoomId}; - use serde::{de::IntoDeserializer, Deserialize, Serialize}; + use serde::{Deserialize, Serialize}; use crate::{Endpoint, FromHttpError, IntoHttpError, Metadata, Outgoing}; @@ -414,8 +414,7 @@ mod tests { room_alias: { let segment = path_segments.get(5).unwrap().as_bytes(); let decoded = percent_encoding::percent_decode(segment).decode_utf8_lossy(); - RoomAliasId::deserialize(decoded.into_deserializer()) - .map_err(|e: serde_json::error::Error| e)? + serde_json::from_str(decoded.deref())? }, }) }