Skip to content

Commit

Permalink
implement display for level
Browse files Browse the repository at this point in the history
  • Loading branch information
maxcountryman committed Jan 19, 2024
1 parent 9b7cd82 commit 5cd4637
Show file tree
Hide file tree
Showing 4 changed files with 101 additions and 102 deletions.
1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ tower-sessions-core = "0.9.1"
axum = { version = "0.7.0", features = ["macros"] }
http-body-util = "0.1"
hyper = "1.0"
time = "0.3.31"
tokio = { version = "1.20", features = ["macros", "rt-multi-thread"] }
tower = "0.4"
tower-sessions = "0.9.1"
Expand Down
47 changes: 22 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,33 +50,20 @@ use axum::{
Router,
};
use axum_messages::{Messages, MessagesManagerLayer};
use time::Duration;
use tower_sessions::{Expiry, MemoryStore, SessionManagerLayer};
use tower_sessions::{MemoryStore, SessionManagerLayer};

#[tokio::main]
async fn main() {
let session_store = MemoryStore::default();
let session_layer = SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::OnInactivity(Duration::days(1)));

let app = Router::new()
.route("/", get(set_messages_handler))
.route("/read-messages", get(read_messages_handler))
.layer(MessagesManagerLayer)
.layer(session_layer);
async fn set_messages_handler(messages: Messages) -> impl IntoResponse {
messages
.info("Hello, world!")
.debug("This is a debug message.");

let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
axum::serve(listener, app.into_make_service())
.await
.unwrap();
Redirect::to("/read-messages")
}

async fn read_messages_handler(messages: Messages) -> impl IntoResponse {
let messages = messages
.into_iter()
.map(|message| format!("{:?}: {}", message.level, message))
.map(|message| format!("{}: {}", message.level, message))
.collect::<Vec<_>>()
.join(", ");

Expand All @@ -87,12 +74,22 @@ async fn read_messages_handler(messages: Messages) -> impl IntoResponse {
}
}

async fn set_messages_handler(messages: Messages) -> impl IntoResponse {
messages
.info("Hello, world!")
.debug("This is a debug message.");
#[tokio::main]
async fn main() {
let session_store = MemoryStore::default();
let session_layer = SessionManagerLayer::new(session_store).with_secure(false);

Redirect::to("/read-messages")
let app = Router::new()
.route("/", get(set_messages_handler))
.route("/read-messages", get(read_messages_handler))
.layer(MessagesManagerLayer)
.layer(session_layer);

let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
axum::serve(listener, app.into_make_service())
.await
.unwrap();
}
```

Expand Down
47 changes: 22 additions & 25 deletions examples/basic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,20 @@ use axum::{
Router,
};
use axum_messages::{Messages, MessagesManagerLayer};
use time::Duration;
use tower_sessions::{Expiry, MemoryStore, SessionManagerLayer};
use tower_sessions::{MemoryStore, SessionManagerLayer};

#[tokio::main]
async fn main() {
let session_store = MemoryStore::default();
let session_layer = SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::OnInactivity(Duration::days(1)));

let app = Router::new()
.route("/", get(set_messages_handler))
.route("/read-messages", get(read_messages_handler))
.layer(MessagesManagerLayer)
.layer(session_layer);
async fn set_messages_handler(messages: Messages) -> impl IntoResponse {
messages
.info("Hello, world!")
.debug("This is a debug message.");

let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
axum::serve(listener, app.into_make_service())
.await
.unwrap();
Redirect::to("/read-messages")
}

async fn read_messages_handler(messages: Messages) -> impl IntoResponse {
let messages = messages
.into_iter()
.map(|message| format!("{:?}: {}", message.level, message))
.map(|message| format!("{}: {}", message.level, message))
.collect::<Vec<_>>()
.join(", ");

Expand All @@ -43,10 +30,20 @@ async fn read_messages_handler(messages: Messages) -> impl IntoResponse {
}
}

async fn set_messages_handler(messages: Messages) -> impl IntoResponse {
messages
.info("Hello, world!")
.debug("This is a debug message.");
#[tokio::main]
async fn main() {
let session_store = MemoryStore::default();
let session_layer = SessionManagerLayer::new(session_store).with_secure(false);

Redirect::to("/read-messages")
let app = Router::new()
.route("/", get(set_messages_handler))
.route("/read-messages", get(read_messages_handler))
.layer(MessagesManagerLayer)
.layer(session_layer);

let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
axum::serve(listener, app.into_make_service())
.await
.unwrap();
}
108 changes: 57 additions & 51 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,33 +12,20 @@
//! Router,
//! };
//! use axum_messages::{Messages, MessagesManagerLayer};
//! use time::Duration;
//! use tower_sessions::{Expiry, MemoryStore, SessionManagerLayer};
//! use tower_sessions::{MemoryStore, SessionManagerLayer};
//!
//! #[tokio::main]
//! async fn main() {
//! let session_store = MemoryStore::default();
//! let session_layer = SessionManagerLayer::new(session_store)
//! .with_secure(false)
//! .with_expiry(Expiry::OnInactivity(Duration::days(1)));
//!
//! let app = Router::new()
//! .route("/", get(set_messages_handler))
//! .route("/read-messages", get(read_messages_handler))
//! .layer(MessagesManagerLayer)
//! .layer(session_layer);
//! async fn set_messages_handler(messages: Messages) -> impl IntoResponse {
//! messages
//! .info("Hello, world!")
//! .debug("This is a debug message.");
//!
//! let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
//! let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
//! axum::serve(listener, app.into_make_service())
//! .await
//! .unwrap();
//! Redirect::to("/read-messages")
//! }
//!
//! async fn read_messages_handler(messages: Messages) -> impl IntoResponse {
//! let messages = messages
//! .into_iter()
//! .map(|message| format!("{:?}: {}", message.level, message))
//! .map(|message| format!("{}: {}", message.level, message))
//! .collect::<Vec<_>>()
//! .join(", ");
//!
Expand All @@ -49,12 +36,22 @@
//! }
//! }
//!
//! async fn set_messages_handler(messages: Messages) -> impl IntoResponse {
//! messages
//! .info("Hello, world!")
//! .debug("This is a debug message.");
//! #[tokio::main]
//! async fn main() {
//! let session_store = MemoryStore::default();
//! let session_layer = SessionManagerLayer::new(session_store).with_secure(false);
//!
//! Redirect::to("/read-messages")
//! let app = Router::new()
//! .route("/", get(set_messages_handler))
//! .route("/read-messages", get(read_messages_handler))
//! .layer(MessagesManagerLayer)
//! .layer(session_layer);
//!
//! let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
//! let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
//! axum::serve(listener, app.into_make_service())
//! .await
//! .unwrap();
//! }
//! ```
#![warn(
Expand Down Expand Up @@ -136,6 +133,18 @@ pub enum Level {
Error = 4,
}

impl fmt::Display for Level {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(match self {
Self::Debug => "Debug",
Self::Info => "Info",
Self::Success => "Success",
Self::Warning => "Warning",
Self::Error => "Error",
})
}
}

#[derive(Debug, Clone, Default, Deserialize, Serialize)]
struct Data {
pending_messages: MessageQueue,
Expand Down Expand Up @@ -238,6 +247,26 @@ impl Iterator for Messages {
}
}

#[async_trait]
impl<S> FromRequestParts<S> for Messages
where
S: Send + Sync,
{
type Rejection = (StatusCode, &'static str);

async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result<Self, Self::Rejection> {
parts
.extensions
.get::<Messages>()
.cloned()
.ok_or((
StatusCode::INTERNAL_SERVER_ERROR,
"Could not extract messages. Is `MessagesManagerLayer` installed?",
))
.map(Messages::load)
}
}

/// MIddleware provider `Messages` as a request extension.
#[derive(Debug, Clone)]
pub struct MessagesManager<S> {
Expand Down Expand Up @@ -315,44 +344,21 @@ impl<S> Layer<S> for MessagesManagerLayer {
}
}

#[async_trait]
impl<S> FromRequestParts<S> for Messages
where
S: Send + Sync,
{
type Rejection = (StatusCode, &'static str);

async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result<Self, Self::Rejection> {
parts
.extensions
.get::<Messages>()
.cloned()
.ok_or((
StatusCode::INTERNAL_SERVER_ERROR,
"Could not extract messages. Is `MessagesManagerLayer` installed?",
))
.map(|messages| messages.load())
}
}

#[cfg(test)]
mod tests {
use axum::{response::Redirect, routing::get, Router};
use axum_core::{body::Body, extract::Request, response::IntoResponse};
use http::header;
use http_body_util::BodyExt;
use time::Duration;
use tower::ServiceExt;
use tower_sessions::{Expiry, MemoryStore, SessionManagerLayer};
use tower_sessions::{MemoryStore, SessionManagerLayer};

use super::*;

#[tokio::test]
async fn basic() {
let session_store = MemoryStore::default();
let session_layer = SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::OnInactivity(Duration::days(1)));
let session_layer = SessionManagerLayer::new(session_store).with_secure(false);

let app = Router::new()
.route("/", get(root))
Expand All @@ -363,7 +369,7 @@ mod tests {
async fn root(messages: Messages) -> impl IntoResponse {
messages
.into_iter()
.map(|message| format!("{:?}: {}", message.level, message))
.map(|message| format!("{}: {}", message.level, message))
.collect::<Vec<_>>()
.join(", ")
}
Expand Down

0 comments on commit 5cd4637

Please sign in to comment.