Skip to content

Commit 475fc40

Browse files
authored
Add standard traits to public structs (#32)
* Add common traits to pub structs. This adds traits such as `Clone`, `Default`, `serde`, and `Hash` to public facing structs where possible and logical. Also optimize imports. * Bump to v0.9.1
1 parent 4bef960 commit 475fc40

File tree

12 files changed

+53
-44
lines changed

12 files changed

+53
-44
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "web-push"
33
description = "Web push notification client with support for http-ece encryption and VAPID authentication."
4-
version = "0.9.0"
4+
version = "0.9.1"
55
authors = ["Julius de Bruijn <[email protected]>", "Andrew Ealovega <[email protected]>"]
66
license = "Apache-2.0"
77
homepage = "https://github.com/pimeys/rust-web-push"

src/clients/hyper_client.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
use std::convert::Infallible;
2+
13
use http::header::{CONTENT_LENGTH, RETRY_AFTER};
24
use hyper::{body::HttpBody, client::HttpConnector, Body, Client, Request as HttpRequest};
35
use hyper_tls::HttpsConnector;
46

57
use crate::clients::request_builder;
68
use crate::error::{RetryAfter, WebPushError};
79
use crate::message::WebPushMessage;
8-
use std::convert::Infallible;
910

1011
/// An async client for sending the notification payload.
1112
///

src/clients/isahc_client.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
use futures_lite::AsyncReadExt;
12
use http::header::{CONTENT_LENGTH, RETRY_AFTER};
23
use isahc::HttpClient;
34

45
use crate::clients::request_builder;
56
use crate::error::{RetryAfter, WebPushError};
67
use crate::message::WebPushMessage;
7-
use futures_lite::AsyncReadExt;
88

99
/// An async client for sending the notification payload. This client is expensive to create, and
1010
/// should be reused.

src/clients/request_builder.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
//! Functions used to send and consume push http messages.
22
//! This module can be used to build custom clients.
33
4-
use crate::{error::WebPushError, message::WebPushMessage};
54
use http::header::{CONTENT_ENCODING, CONTENT_LENGTH, CONTENT_TYPE};
65
use http::{Request, StatusCode};
76

7+
use crate::{error::WebPushError, message::WebPushMessage};
8+
89
#[derive(Deserialize, Serialize, Debug, PartialEq)]
910
struct ErrorInfo {
1011
code: u16,
@@ -87,11 +88,12 @@ pub fn parse_response(response_status: StatusCode, body: Vec<u8>) -> Result<(),
8788

8889
#[cfg(test)]
8990
mod tests {
91+
use http::Uri;
92+
9093
use crate::clients::request_builder::*;
9194
use crate::error::WebPushError;
9295
use crate::http_ece::ContentEncoding;
9396
use crate::message::WebPushMessageBuilder;
94-
use http::Uri;
9597

9698
#[test]
9799
fn builds_a_correct_request_with_empty_payload() {

src/error.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
use base64::DecodeError;
2-
use http::uri::InvalidUri;
3-
use serde_json::error::Error as JsonError;
41
use std::string::FromUtf8Error;
52
use std::time::{Duration, SystemTime};
63
use std::{convert::From, error::Error, fmt, io::Error as IoError};
74

8-
#[derive(PartialEq, Debug)]
5+
use base64::DecodeError;
6+
use http::uri::InvalidUri;
7+
use serde_json::error::Error as JsonError;
8+
9+
#[derive(PartialEq, Debug, Clone, Ord, PartialOrd, Eq, Deserialize, Serialize, Hash)]
910
pub enum WebPushError {
1011
/// An unknown error happened encrypting the message,
1112
Unspecified,

src/http_ece.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
use ece::encrypt;
2+
13
use crate::error::WebPushError;
24
use crate::message::WebPushPayload;
35
use crate::vapid::VapidSignature;
4-
use ece::encrypt;
56

67
/// Content encoding profiles.
78
pub enum ContentEncoding {
@@ -78,12 +79,13 @@ impl<'a> HttpEce<'a> {
7879

7980
#[cfg(test)]
8081
mod tests {
82+
use base64::{self, URL_SAFE};
83+
use regex::Regex;
84+
8185
use crate::error::WebPushError;
8286
use crate::http_ece::{ContentEncoding, HttpEce};
8387
use crate::VapidSignature;
8488
use crate::WebPushPayload;
85-
use base64::{self, URL_SAFE};
86-
use regex::Regex;
8789

8890
#[test]
8991
fn test_payload_too_big() {

src/lib.rs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,29 +42,24 @@
4242
//! # }
4343
//! ```
4444
45-
#[macro_use]
46-
extern crate serde_derive;
4745
#[macro_use]
4846
extern crate log;
49-
50-
mod clients;
51-
mod error;
52-
mod http_ece;
53-
mod message;
54-
mod vapid;
47+
#[macro_use]
48+
extern crate serde_derive;
5549

5650
#[cfg(feature = "hyper-client")]
5751
pub use crate::clients::hyper_client::WebPushClient;
58-
5952
#[cfg(not(feature = "hyper-client"))]
6053
pub use crate::clients::isahc_client::WebPushClient;
61-
54+
pub use crate::clients::request_builder;
6255
pub use crate::error::WebPushError;
63-
64-
pub use crate::message::{SubscriptionInfo, SubscriptionKeys, WebPushMessage, WebPushMessageBuilder, WebPushPayload};
65-
6656
pub use crate::http_ece::ContentEncoding;
57+
pub use crate::message::{SubscriptionInfo, SubscriptionKeys, WebPushMessage, WebPushMessageBuilder, WebPushPayload};
6758
pub use crate::vapid::builder::PartialVapidSignatureBuilder;
6859
pub use crate::vapid::{VapidSignature, VapidSignatureBuilder};
6960

70-
pub use crate::clients::request_builder;
61+
mod clients;
62+
mod error;
63+
mod http_ece;
64+
mod message;
65+
mod vapid;

src/message.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1+
use http::uri::Uri;
2+
13
use crate::error::WebPushError;
24
use crate::http_ece::{ContentEncoding, HttpEce};
35
use crate::vapid::VapidSignature;
4-
use http::uri::Uri;
56

67
/// Encryption keys from the client.
7-
#[derive(Debug, Deserialize, Serialize)]
8+
#[derive(Debug, Deserialize, Serialize, Clone, Eq, PartialEq, Ord, PartialOrd, Default, Hash)]
89
pub struct SubscriptionKeys {
910
/// The public key. Base64 encoded.
1011
pub p256dh: String,
@@ -16,7 +17,7 @@ pub struct SubscriptionKeys {
1617
/// subscription info JSON data (AKA pushSubscription object).
1718
///
1819
/// Client pushSubscription objects can be directly deserialized into this struct using serde.
19-
#[derive(Debug, Deserialize, Serialize)]
20+
#[derive(Debug, Deserialize, Serialize, Clone, Eq, PartialEq, Ord, PartialOrd, Default, Hash)]
2021
pub struct SubscriptionInfo {
2122
/// The endpoint URI for sending the notification.
2223
pub endpoint: String,

src/vapid/builder.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1+
use std::collections::BTreeMap;
2+
use std::io::Read;
3+
4+
use http::uri::Uri;
5+
use jwt_simple::prelude::*;
6+
use serde_json::Value;
7+
18
use crate::error::WebPushError;
29
use crate::message::SubscriptionInfo;
310
use crate::vapid::signer::Claims;
411
use crate::vapid::{VapidKey, VapidSignature, VapidSigner};
5-
use http::uri::Uri;
6-
use jwt_simple::prelude::*;
7-
use serde_json::Value;
8-
use std::collections::BTreeMap;
9-
use std::io::Read;
1012

1113
/// A VAPID signature builder for generating an optional signature to the
1214
/// request. This encryption is required for payloads in all current and future browsers.
@@ -241,10 +243,12 @@ impl<'a> PartialVapidSignatureBuilder {
241243

242244
#[cfg(test)]
243245
mod tests {
246+
use std::fs::File;
247+
248+
use ::lazy_static::lazy_static;
249+
244250
use crate::message::SubscriptionInfo;
245251
use crate::vapid::VapidSignatureBuilder;
246-
use ::lazy_static::lazy_static;
247-
use std::fs::File;
248252

249253
lazy_static! {
250254
static ref PRIVATE_PEM: File = File::open("resources/vapid_test_key.pem").unwrap();

src/vapid/key.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ impl VapidKey {
2222

2323
#[cfg(test)]
2424
mod tests {
25-
use crate::vapid::key::VapidKey;
2625
use std::fs::File;
2726

27+
use crate::vapid::key::VapidKey;
28+
2829
#[test]
2930
/// Tests that VapidKey derives the correct public key.
3031
fn test_public_key_derivation() {

0 commit comments

Comments
 (0)