summaryrefslogtreecommitdiff
path: root/src/test/webpush.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/webpush.rs')
-rw-r--r--src/test/webpush.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/test/webpush.rs b/src/test/webpush.rs
new file mode 100644
index 0000000..c86d03f
--- /dev/null
+++ b/src/test/webpush.rs
@@ -0,0 +1,37 @@
+use std::{
+ mem,
+ sync::{Arc, Mutex},
+};
+
+use web_push::{WebPushClient, WebPushError, WebPushMessage};
+
+#[derive(Clone)]
+pub struct Client {
+ sent: Arc<Mutex<Vec<WebPushMessage>>>,
+}
+
+impl Client {
+ pub fn new() -> Self {
+ Self {
+ sent: Arc::default(),
+ }
+ }
+
+ // Clears the list of sent messages (for all clones of this Client) when called, because we
+ // can't clone `WebPushMessage`s so we either need to move them or try to reconstruct them,
+ // either of which sucks but moving them sucks less.
+ pub fn sent(&self) -> Vec<WebPushMessage> {
+ let mut sent = self.sent.lock().unwrap();
+ mem::replace(&mut *sent, Vec::new())
+ }
+}
+
+#[async_trait::async_trait]
+impl WebPushClient for Client {
+ async fn send(&self, message: WebPushMessage) -> Result<(), WebPushError> {
+ let mut sent = self.sent.lock().unwrap();
+ sent.push(message);
+
+ Ok(())
+ }
+}