Now compiles against rocket-0.5.0-rc.2
This commit is contained in:
parent
c5a9767881
commit
bc2180d1e4
@ -1,8 +1,8 @@
|
||||
[package]
|
||||
name = "rocket_session"
|
||||
version = "0.2.2"
|
||||
version = "0.3.0"
|
||||
authors = ["Ondřej Hruška <ondra@ondrovo.com>"]
|
||||
edition = "2018"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
description = "Rocket.rs plug-in for cookie-based sessions holding arbitrary data"
|
||||
repository = "https://git.ondrovo.com/packages/rocket_session"
|
||||
@ -17,5 +17,5 @@ categories = [
|
||||
|
||||
[dependencies]
|
||||
rand = "0.8"
|
||||
rocket = "0.4"
|
||||
rocket = "0.5.0-rc.2"
|
||||
parking_lot = "0.11"
|
||||
|
||||
@ -1,21 +1,20 @@
|
||||
#![feature(proc_macro_hygiene, decl_macro)]
|
||||
#[macro_use]
|
||||
extern crate rocket;
|
||||
|
||||
use rocket::response::content::Html;
|
||||
use rocket::response::content::RawHtml;
|
||||
use rocket::response::Redirect;
|
||||
|
||||
type Session<'a> = rocket_session::Session<'a, Vec<String>>;
|
||||
|
||||
fn main() {
|
||||
rocket::ignite()
|
||||
#[launch]
|
||||
fn rocket() -> _ {
|
||||
rocket::build()
|
||||
.attach(Session::fairing())
|
||||
.mount("/", routes![index, add, remove])
|
||||
.launch();
|
||||
}
|
||||
|
||||
#[get("/")]
|
||||
fn index(session: Session) -> Html<String> {
|
||||
fn index(session: Session) -> RawHtml<String> {
|
||||
let mut page = String::new();
|
||||
page.push_str(
|
||||
r#"
|
||||
@ -38,7 +37,7 @@ fn index(session: Session) -> Html<String> {
|
||||
}
|
||||
});
|
||||
page.push_str("</ul>");
|
||||
Html(page)
|
||||
RawHtml(page)
|
||||
}
|
||||
|
||||
#[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.
|
||||
|
||||
#![feature(proc_macro_hygiene, decl_macro)]
|
||||
#[macro_use]
|
||||
extern crate rocket;
|
||||
|
||||
use rocket::response::content::Html;
|
||||
use rocket::response::content::RawHtml;
|
||||
use std::time::Duration;
|
||||
|
||||
#[derive(Default, Clone)]
|
||||
@ -18,8 +17,9 @@ struct SessionData {
|
||||
// It's convenient to define a type alias:
|
||||
type Session<'a> = rocket_session::Session<'a, SessionData>;
|
||||
|
||||
fn main() {
|
||||
rocket::ignite()
|
||||
#[launch]
|
||||
fn rocket() -> _ {
|
||||
rocket::build()
|
||||
.attach(
|
||||
Session::fairing()
|
||||
// 10 seconds of inactivity until session expires
|
||||
@ -30,11 +30,10 @@ fn main() {
|
||||
.with_cookie_len(20),
|
||||
)
|
||||
.mount("/", routes![index, about])
|
||||
.launch();
|
||||
}
|
||||
|
||||
#[get("/")]
|
||||
fn index(session: Session) -> Html<String> {
|
||||
fn index(session: Session) -> RawHtml<String> {
|
||||
// Here we build the entire response inside the 'tap' closure.
|
||||
|
||||
// While inside, the session is locked to parallel changes, e.g.
|
||||
@ -42,7 +41,7 @@ fn index(session: Session) -> Html<String> {
|
||||
session.tap(|sess| {
|
||||
sess.visits1 += 1;
|
||||
|
||||
Html(format!(
|
||||
RawHtml(format!(
|
||||
r##"
|
||||
<!DOCTYPE html>
|
||||
<h1>Home</h1>
|
||||
@ -55,14 +54,14 @@ fn index(session: Session) -> Html<String> {
|
||||
}
|
||||
|
||||
#[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
|
||||
let count = session.tap(|sess| {
|
||||
sess.visits2 += 1;
|
||||
sess.visits2
|
||||
});
|
||||
|
||||
Html(format!(
|
||||
RawHtml(format!(
|
||||
r##"
|
||||
<!DOCTYPE html>
|
||||
<h1>About</h1>
|
||||
|
||||
23
src/lib.rs
23
src/lib.rs
@ -1,11 +1,12 @@
|
||||
use parking_lot::{Mutex, RwLock, RwLockUpgradableReadGuard};
|
||||
use rand::{Rng, rngs::OsRng};
|
||||
use rand::{rngs::OsRng, Rng};
|
||||
|
||||
use rocket::{
|
||||
fairing::{self, Fairing, Info},
|
||||
http::{Cookie, Status},
|
||||
outcome::Outcome,
|
||||
request::FromRequest,
|
||||
Outcome, Request, Response, Rocket, State,
|
||||
Build, Request, Response, Rocket, State,
|
||||
};
|
||||
|
||||
use std::borrow::Cow;
|
||||
@ -114,19 +115,20 @@ where
|
||||
D: 'static + Sync + Send + Default,
|
||||
{
|
||||
/// The shared state reference
|
||||
store: State<'a, SessionStore<D>>,
|
||||
store: &'a State<SessionStore<D>>,
|
||||
/// Session ID
|
||||
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
|
||||
D: 'static + Sync + Send + Default,
|
||||
{
|
||||
type Error = ();
|
||||
|
||||
fn from_request(request: &'a Request<'r>) -> Outcome<Self, (Status, Self::Error), ()> {
|
||||
let store: State<SessionStore<D>> = request.guard().unwrap();
|
||||
async fn from_request(request: &'r Request<'_>) -> Outcome<Self, (Status, Self::Error), ()> {
|
||||
let store = request.guard::<&State<SessionStore<D>>>().await.unwrap();
|
||||
Outcome::Success(Session {
|
||||
id: request.local_cache(|| {
|
||||
let store_ug = store.inner.upgradable_read();
|
||||
@ -198,7 +200,7 @@ where
|
||||
new_id
|
||||
}
|
||||
}),
|
||||
store,
|
||||
store: store,
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -295,6 +297,7 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
#[rocket::async_trait]
|
||||
impl<D> Fairing for SessionFairing<D>
|
||||
where
|
||||
D: 'static + Sync + Send + Default,
|
||||
@ -302,11 +305,11 @@ where
|
||||
fn info(&self) -> Info {
|
||||
Info {
|
||||
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
|
||||
Ok(rocket.manage(SessionStore::<D> {
|
||||
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
|
||||
let session = request.local_cache(|| SessionID("".to_string()));
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user