Add initial implementation of macro expansion.
This commit is contained in:
parent
b1be0f411f
commit
27349e57ab
63
src/lib.rs
63
src/lib.rs
@ -2,9 +2,10 @@
|
|||||||
|
|
||||||
#![deny(missing_debug_implementations)]
|
#![deny(missing_debug_implementations)]
|
||||||
#![feature(proc_macro)]
|
#![feature(proc_macro)]
|
||||||
|
#![recursion_limit="128"]
|
||||||
|
|
||||||
extern crate proc_macro;
|
extern crate proc_macro;
|
||||||
extern crate quote;
|
#[macro_use] extern crate quote;
|
||||||
extern crate ruma_api;
|
extern crate ruma_api;
|
||||||
extern crate syn;
|
extern crate syn;
|
||||||
#[macro_use] extern crate synom;
|
#[macro_use] extern crate synom;
|
||||||
@ -35,8 +36,64 @@ struct Api {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Api {
|
impl Api {
|
||||||
fn output(&self) -> Tokens {
|
fn output(self) -> Tokens {
|
||||||
Tokens::new()
|
let description = self.metadata.description;
|
||||||
|
let method = self.metadata.method;
|
||||||
|
let name = self.metadata.name;
|
||||||
|
let path = self.metadata.path;
|
||||||
|
let rate_limited = self.metadata.rate_limited;
|
||||||
|
let requires_authentication = self.metadata.requires_authentication;
|
||||||
|
|
||||||
|
quote! {
|
||||||
|
use std::convert::TryFrom;
|
||||||
|
|
||||||
|
/// The API endpoint.
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Endpoint;
|
||||||
|
|
||||||
|
/// Data for a request to this API endpoint.
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Request;
|
||||||
|
|
||||||
|
impl TryFrom<Request> for ::hyper::Request {
|
||||||
|
type Error = ();
|
||||||
|
|
||||||
|
fn try_from(request: Request) -> Result<Self, Self::Error> {
|
||||||
|
Ok(
|
||||||
|
::hyper::Request::new(
|
||||||
|
::hyper::#method,
|
||||||
|
"/".parse().expect("failed to parse request URI"),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Data in the response from this API endpoint.
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Response;
|
||||||
|
|
||||||
|
impl TryFrom<::hyper::Response> for Response {
|
||||||
|
type Error = ();
|
||||||
|
|
||||||
|
fn try_from(hyper_response: ::hyper::Response) -> Result<Self, Self::Error> {
|
||||||
|
Ok(Response)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ::ruma_api::Endpoint for Endpoint {
|
||||||
|
type Request = Request;
|
||||||
|
type Response = Response;
|
||||||
|
|
||||||
|
const METADATA: ::ruma_api::Metadata = ::ruma_api::Metadata {
|
||||||
|
description: #description,
|
||||||
|
method: ::hyper::#method,
|
||||||
|
name: #name,
|
||||||
|
path: #path,
|
||||||
|
rate_limited: #rate_limited,
|
||||||
|
requires_authentication: #requires_authentication,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#![feature(proc_macro)]
|
#![feature(associated_consts, proc_macro, try_from)]
|
||||||
|
|
||||||
extern crate hyper;
|
extern crate hyper;
|
||||||
extern crate ruma_api;
|
extern crate ruma_api;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user