Skip to content

Instantly share code, notes, and snippets.

@CrowdHailer
Last active December 6, 2018 18:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CrowdHailer/2cd75febff65ea8fc118070e8d56cb7d to your computer and use it in GitHub Desktop.
Save CrowdHailer/2cd75febff65ea8fc118070e8d56cb7d to your computer and use it in GitHub Desktop.
Raxx in Rust
pub mod raxx {
#[derive(Debug)]
pub enum Method {GET, POST}
#[derive(Debug)]
pub struct Request {
pub method: Method
}
#[derive(Debug, PartialEq)]
pub struct Response {
pub body: String
}
pub trait Server {
fn handle_request(&self, request: Request) -> Response;
}
}
pub struct MyServer {}
impl raxx::Server for MyServer {
fn handle_request(&self, request: raxx::Request) -> raxx::Response {
match request.method {
raxx::Method::GET =>
raxx::Response{body: "GET".to_string()},
raxx::Method::POST =>
raxx::Response{body: "POST".to_string()}
}
}
}
pub struct MyLogger<Server: raxx::Server + ?Sized> {
inner: Server
}
impl<T: raxx::Server> raxx::Server for MyLogger<T> {
fn handle_request(&self, request: raxx::Request) -> raxx::Response {
println!("{:?}", "LOGGING");
self.inner.handle_request(request)
}
}
// Do rust traits always have a &self
#[cfg(test)]
mod tests {
use raxx;
use raxx::Server;
use MyServer;
use MyLogger;
#[test]
fn it_works() {
let request = raxx::Request{method: raxx::Method::GET};
println!("{:?}", request);
let server = MyServer{};
let middleware = MyLogger{inner: server};
assert_eq!(raxx::Response{body: "POST".to_string()}, middleware.handle_request(request));
assert_eq!(1, 2);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment