Skip to content

Commit

Permalink
provide tracing (#13)
Browse files Browse the repository at this point in the history
  • Loading branch information
maxcountryman authored Apr 14, 2024
1 parent 9c7b85d commit 69e8e28
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 7 deletions.
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ serde = { version = "1.0.195", features = ["derive"] }
serde_json = "1"
tower = "0.4"
tower-sessions-core = "0.12.0"
tracing = { version = "0.1.40", features = ["log"] }

[dev-dependencies]
axum = { version = "0.7.0", features = ["macros"] }
Expand Down
30 changes: 23 additions & 7 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,16 @@ impl Messages {
self
}

/// Returns the number of messages to be read.
pub fn len(&self) -> usize {
self.data.lock().messages.len()
}

/// Returns `true` if there are no messages.
pub fn is_empty(&self) -> bool {
self.data.lock().messages.is_empty()
}

async fn save(self) -> Result<Self, session::Error> {
self.session
.insert(Self::DATA_KEY, self.data.clone())
Expand Down Expand Up @@ -338,31 +348,37 @@ where

Box::pin(async move {
let Some(session) = req.extensions().get::<Session>().cloned() else {
tracing::error!(
"session not found in request extensions; do tower-sessions versions match?"
);
let mut res = Response::default();
*res.status_mut() = http::StatusCode::INTERNAL_SERVER_ERROR;
return Ok(res);
};

let data = match session.get::<Data>(Messages::DATA_KEY).await {
let data = match session.get(Messages::DATA_KEY).await {
Ok(Some(data)) => data,
Ok(None) => Data::default(),
Err(_) => {
Err(err) => {
tracing::error!(err = %err, "could not load messages data");
let mut res = Response::default();
*res.status_mut() = http::StatusCode::INTERNAL_SERVER_ERROR;
return Ok(res);
}
};

let messages = Messages::new(session, data);

req.extensions_mut().insert(messages.clone());

let res = inner.call(req).await;

if messages.is_modified() && messages.save().await.is_err() {
let mut res = Response::default();
*res.status_mut() = http::StatusCode::INTERNAL_SERVER_ERROR;
return Ok(res);
if messages.is_modified() {
if let Err(err) = messages.save().await {
tracing::error!(err = %err, "could not save messages data");
let mut res = Response::default();
*res.status_mut() = http::StatusCode::INTERNAL_SERVER_ERROR;
return Ok(res);
}
};

res
Expand Down

0 comments on commit 69e8e28

Please sign in to comment.