1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
//! Postmark is a HTTP client agnostic rust client to postmark. We //! Provide a `reqwest` implementation of a client that can be used pretty //! simply by initializing it and passing it into the execute function of a //! [`Query`], all [`Endpoint`] implement the Query trait. //! //! Some Endpoints are already provided to you. But if you need some that are //! not implemented you are not constrained to modified this crated, you can //! implement your own by implementing the [`Endpoint`] trait and it will //! work transparently with this library. //! //! To use the [`reqwest`] based client, you need to enable the feature `"reqwest"` //! You can also implement you own client by implementing the [`Client`] trait //! //! This crate is heavily inspired by the article ["Designing Rust bindings for REST APIs](https://plume.benboeckel.net/~/JustAnotherBlog/designing-rust-bindings-for-rest-ap-is) //! by Ben Boeckel and used in the [gitlab](https://crates.io/crates/gitlab) crate. //! It allows to have modular clients (someone wants to use something else than //! reqwest), and [`Endpoint`]s not supported by the library without needing to fork it. //! //! # Example: //! ``` //! use postmark::reqwest::PostmarkClient; //! use postmark::*; //! //! # async fn send_email(){ //! let client = PostmarkClient::builder() //! .base_url("https://api.postmarkapp.com/") //! .token("<sometoken>") //! .build(); //! //! let req = api::email::SendEmailRequest::builder() //! .from("me@example.com") //! .to("you@example.com") //! .body(api::email::Body::Text("Hi, this is me!".to_string())) //! .build(); //! let resp = req.execute(&client).await; //! resp.unwrap(); //! # } //! ``` /// POSTMARK_API_URL is the default url to poke Postmark's API pub const POSTMARK_API_URL: &str = "https://api.postmarkapp.com/"; pub mod api; mod client; pub use client::*; #[cfg(feature = "reqwest")] pub mod reqwest;