rocket-versioning

api versioning for rocket web applications

INSTALL

Example

```rust

[macro_use] extern crate rocket;

use rocket::local::blocking::Client; use rocket::http::{Header, Status};

use super::Versioning;

[get("/versioning", rank = 4)]

fn versioning(v: Versioning<1, 0>) -> String { "v1.0".tostring() }

[get("/versioning", rank = 3)]

fn versioning11(v: Versioning<1, 1>) -> String { "v1.1".tostring() }

[get("/versioning", rank = 2)]

fn versioning21(v: Versioning<2, 1>) -> String { "v2.1".tostring() }

[launch]

fn rocket() -> _ { rocket::build().mount("/", routes![versioning, versioning11, versioning21]) }

[test]

fn testversioning() { let client = Client::tracked(rocket()).expect("invalid rocket instance"); // NOTICE: version should be Major.Minor.Patch, and patch will be ignored. // see: https://docs.rs/semver/1.0.3/semver/struct.Version.html#errors let response = client.get("/versioning").header(Header::new("Api-Version", "1.0.0")).dispatch(); asserteq!(response.status(), Status::Ok); asserteq!(response.intostring().unwrap(), "v1.0");

let response = client.get("/versioning").header(Header::new("Api-Version", "1.1.0")).dispatch();
assert_eq!(response.status(), Status::Ok);
assert_eq!(response.into_string().unwrap(), "v1.1");

let response = client.get("/versioning").header(Header::new("Api-Version", "2.1.0")).dispatch();
assert_eq!(response.status(), Status::Ok);
assert_eq!(response.into_string().unwrap(), "v2.1");

let response = client.get("/versioning").header(Header::new("Api-Version", "2.0.0")).dispatch();
assert_eq!(response.status(), Status::NotFound);

} ```

NOTICE

version in header should be Major.Minor.Patch, and patch will be ignored. see (unsopported)[https://docs.rs/semver/1.0.3/semver/struct.Version.html#errors] version formats.