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
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
//!
//! This crate proposes a reimplementation of [Wiremock](http://wiremock.org/).
//! Its aims at converting [Wiremock stubs](http://wiremock.org/docs/stubbing/) into
//! [wiremock-rs](https://github.com/LukeMathWalker/wiremock-rs) mocks.
//!
//! You can also use [stubr-build](https://crates.io/crates/stubr-build) to share stubs between a producer project and a consumer one.
//!
//! Also available as a [cli](https://crates.io/crates/stubr-cli).
//!
//! # use it
//!
//! ```no_run
//! use isahc;
//! use stubr::*;
//! use asserhttp::*;
//!
//! #[async_std::test]
//! #[stubr::mock]
//! async fn simple_async() {
//!     // supply a directory containing json stubs. Invalid files are just ignored
//!     let stubr = Stubr::start("tests/stubs").await;
//!     // or just mount a single file
//!     let stubr = Stubr::start("tests/stubs/hello.json").await;
//!     // or configure it (more configurations to come)
//!     let stubr = Stubr::start_with("tests/stubs", Config { port: Some(8080), ..Default::default () }).await;
//!     isahc::get_async(stubr.uri()).await.expect_status_ok();
//! }
//!
//! #[test]
//! #[stubr::mock]
//! fn simple_blocking() {
//!     // can also be used in a blocking way
//!     let stubr = Stubr::start_blocking("tests/stubs");
//!     let stubr = Stubr::start_blocking_with("tests/stubs", Config { port: Some(8080), ..Default::default () });
//!     isahc::get(stubr.uri()).expect_status_ok();
//! }
//! ```
//!
//! # macro
//!
//! ```no_run
//! use isahc;
//! use stubr::*;
//! use asserhttp::*;
//!
//! #[async_std::test]
//! #[stubr::mock] // <- takes all stubs under "tests/stubs"
//! async fn with_macro() {
//!     surf::get(stubr.uri()).await.expect_status_ok();
//! }
//!
//! #[async_std::test]
//! #[stubr::mock("pets", port = 4321)] // <- takes all stubs under "tests/stubs/pets"
//! async fn with_path_and_port() {
//!     surf::get(stubr.uri()).await.expect_status_ok();
//! }
//! ```
//!
//! # configuration
//!
//! A [`Stubr`] server can be configured globally thanks to [`Config`] struct.
//!
//! ```
//! use stubr::Config;
//! let config = Config {
//!     // server port, defaults to random
//!     port: Some(8080),
//!     // enable verbose logs
//!     verbose: Some(true),
//!     // global delay in milliseconds. Supersedes any locally defined one.
//!     global_delay: Some(2000),
//!     // delay in milliseconds added to any locally defined one. Simulates network latencies.
//!     latency: Some(2000),
//! };
//! ```
//!
//! [`Config`]: Config
//! [`Stubr`]: Stubr

#[macro_use]
extern crate lazy_static;

#[cfg(feature = "record")]
pub use record::{config::RecordConfig, StubrRecord};
#[cfg(all(feature = "record", feature = "record-isahc"))]
pub use record::client::isahc_client;
#[cfg(all(feature = "record", feature = "record-reqwest"))]
pub use record::client::reqwest_client;
pub use server::{config::Config, Stubr};
#[cfg(feature = "attributes")]
pub use stubr_attributes::apps;
#[cfg(feature = "attributes")]
pub use stubr_attributes::mock;
#[cfg(all(feature = "record", feature = "attributes"))]
pub use stubr_attributes::record;

mod model;
mod server;
mod cloud;
#[cfg(feature = "record")]
mod record;