Now compiles against rocket-0.5.0-rc.2

master
Jeff Weiss 2 years ago
parent c5a9767881
commit bc2180d1e4
  1. 6
      Cargo.toml
  2. 13
      examples/dog_list/main.rs
  3. 17
      examples/visit_counter/main.rs
  4. 23
      src/lib.rs

@ -1,8 +1,8 @@
[package] [package]
name = "rocket_session" name = "rocket_session"
version = "0.2.2" version = "0.3.0"
authors = ["Ondřej Hruška <ondra@ondrovo.com>"] authors = ["Ondřej Hruška <ondra@ondrovo.com>"]
edition = "2018" edition = "2021"
license = "MIT" license = "MIT"
description = "Rocket.rs plug-in for cookie-based sessions holding arbitrary data" description = "Rocket.rs plug-in for cookie-based sessions holding arbitrary data"
repository = "https://git.ondrovo.com/packages/rocket_session" repository = "https://git.ondrovo.com/packages/rocket_session"
@ -17,5 +17,5 @@ categories = [
[dependencies] [dependencies]
rand = "0.8" rand = "0.8"
rocket = "0.4" rocket = "0.5.0-rc.2"
parking_lot = "0.11" parking_lot = "0.11"

@ -1,21 +1,20 @@
#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use] #[macro_use]
extern crate rocket; extern crate rocket;
use rocket::response::content::Html; use rocket::response::content::RawHtml;
use rocket::response::Redirect; use rocket::response::Redirect;
type Session<'a> = rocket_session::Session<'a, Vec<String>>; type Session<'a> = rocket_session::Session<'a, Vec<String>>;
fn main() { #[launch]
rocket::ignite() fn rocket() -> _ {
rocket::build()
.attach(Session::fairing()) .attach(Session::fairing())
.mount("/", routes![index, add, remove]) .mount("/", routes![index, add, remove])
.launch();
} }
#[get("/")] #[get("/")]
fn index(session: Session) -> Html<String> { fn index(session: Session) -> RawHtml<String> {
let mut page = String::new(); let mut page = String::new();
page.push_str( page.push_str(
r#" r#"
@ -38,7 +37,7 @@ fn index(session: Session) -> Html<String> {
} }
}); });
page.push_str("</ul>"); page.push_str("</ul>");
Html(page) RawHtml(page)
} }
#[post("/add", data = "<dog>")] #[post("/add", data = "<dog>")]

@ -2,11 +2,10 @@
//! //!
//! The expiry time is set to 10 seconds to illustrate how a session is cleared if inactive. //! The expiry time is set to 10 seconds to illustrate how a session is cleared if inactive.
#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use] #[macro_use]
extern crate rocket; extern crate rocket;
use rocket::response::content::Html; use rocket::response::content::RawHtml;
use std::time::Duration; use std::time::Duration;
#[derive(Default, Clone)] #[derive(Default, Clone)]
@ -18,8 +17,9 @@ struct SessionData {
// It's convenient to define a type alias: // It's convenient to define a type alias:
type Session<'a> = rocket_session::Session<'a, SessionData>; type Session<'a> = rocket_session::Session<'a, SessionData>;
fn main() { #[launch]
rocket::ignite() fn rocket() -> _ {
rocket::build()
.attach( .attach(
Session::fairing() Session::fairing()
// 10 seconds of inactivity until session expires // 10 seconds of inactivity until session expires
@ -30,11 +30,10 @@ fn main() {
.with_cookie_len(20), .with_cookie_len(20),
) )
.mount("/", routes![index, about]) .mount("/", routes![index, about])
.launch();
} }
#[get("/")] #[get("/")]
fn index(session: Session) -> Html<String> { fn index(session: Session) -> RawHtml<String> {
// Here we build the entire response inside the 'tap' closure. // Here we build the entire response inside the 'tap' closure.
// While inside, the session is locked to parallel changes, e.g. // While inside, the session is locked to parallel changes, e.g.
@ -42,7 +41,7 @@ fn index(session: Session) -> Html<String> {
session.tap(|sess| { session.tap(|sess| {
sess.visits1 += 1; sess.visits1 += 1;
Html(format!( RawHtml(format!(
r##" r##"
<!DOCTYPE html> <!DOCTYPE html>
<h1>Home</h1> <h1>Home</h1>
@ -55,14 +54,14 @@ fn index(session: Session) -> Html<String> {
} }
#[get("/about")] #[get("/about")]
fn about(session: Session) -> Html<String> { fn about(session: Session) -> RawHtml<String> {
// Here we return a value from the tap function and use it below // Here we return a value from the tap function and use it below
let count = session.tap(|sess| { let count = session.tap(|sess| {
sess.visits2 += 1; sess.visits2 += 1;
sess.visits2 sess.visits2
}); });
Html(format!( RawHtml(format!(
r##" r##"
<!DOCTYPE html> <!DOCTYPE html>
<h1>About</h1> <h1>About</h1>

@ -1,11 +1,12 @@
use parking_lot::{Mutex, RwLock, RwLockUpgradableReadGuard}; use parking_lot::{Mutex, RwLock, RwLockUpgradableReadGuard};
use rand::{Rng, rngs::OsRng}; use rand::{rngs::OsRng, Rng};
use rocket::{ use rocket::{
fairing::{self, Fairing, Info}, fairing::{self, Fairing, Info},
http::{Cookie, Status}, http::{Cookie, Status},
outcome::Outcome,
request::FromRequest, request::FromRequest,
Outcome, Request, Response, Rocket, State, Build, Request, Response, Rocket, State,
}; };
use std::borrow::Cow; use std::borrow::Cow;
@ -114,19 +115,20 @@ where
D: 'static + Sync + Send + Default, D: 'static + Sync + Send + Default,
{ {
/// The shared state reference /// The shared state reference
store: State<'a, SessionStore<D>>, store: &'a State<SessionStore<D>>,
/// Session ID /// Session ID
id: &'a SessionID, id: &'a SessionID,
} }
impl<'a, 'r, D> FromRequest<'a, 'r> for Session<'a, D> #[rocket::async_trait]
impl<'r, D> FromRequest<'r> for Session<'r, D>
where where
D: 'static + Sync + Send + Default, D: 'static + Sync + Send + Default,
{ {
type Error = (); type Error = ();
fn from_request(request: &'a Request<'r>) -> Outcome<Self, (Status, Self::Error), ()> { async fn from_request(request: &'r Request<'_>) -> Outcome<Self, (Status, Self::Error), ()> {
let store: State<SessionStore<D>> = request.guard().unwrap(); let store = request.guard::<&State<SessionStore<D>>>().await.unwrap();
Outcome::Success(Session { Outcome::Success(Session {
id: request.local_cache(|| { id: request.local_cache(|| {
let store_ug = store.inner.upgradable_read(); let store_ug = store.inner.upgradable_read();
@ -198,7 +200,7 @@ where
new_id new_id
} }
}), }),
store, store: store,
}) })
} }
} }
@ -295,6 +297,7 @@ where
} }
} }
#[rocket::async_trait]
impl<D> Fairing for SessionFairing<D> impl<D> Fairing for SessionFairing<D>
where where
D: 'static + Sync + Send + Default, D: 'static + Sync + Send + Default,
@ -302,11 +305,11 @@ where
fn info(&self) -> Info { fn info(&self) -> Info {
Info { Info {
name: "Session", name: "Session",
kind: fairing::Kind::Attach | fairing::Kind::Response, kind: fairing::Kind::Ignite | fairing::Kind::Response,
} }
} }
fn on_attach(&self, rocket: Rocket) -> Result<Rocket, Rocket> { async fn on_ignite(&self, rocket: Rocket<Build>) -> Result<Rocket<Build>, Rocket<Build>> {
// install the store singleton // install the store singleton
Ok(rocket.manage(SessionStore::<D> { Ok(rocket.manage(SessionStore::<D> {
inner: Default::default(), inner: Default::default(),
@ -314,7 +317,7 @@ where
})) }))
} }
fn on_response<'r>(&self, request: &'r Request, response: &mut Response) { async fn on_response<'r>(&self, request: &'r Request<'_>, response: &mut Response) {
// send the session cookie, if session started // send the session cookie, if session started
let session = request.local_cache(|| SessionID("".to_string())); let session = request.local_cache(|| SessionID("".to_string()));

Loading…
Cancel
Save