pact_consumer/
mock_server.rs1use async_trait::async_trait;
4use pact_models::pact::Pact;
5use pact_models::sync_pact::RequestResponsePact;
6use url::Url;
7
8use pact_mock_server::matching::MatchResult;
9use pact_mock_server::mock_server::{MockServerConfig, MockServerMetrics};
10
11use crate::mock_server::http_mock_server::ValidatingHttpMockServer;
12
13pub(crate) mod http_mock_server;
14#[cfg(feature = "plugins")] pub(crate) mod plugin_mock_server;
15
16pub trait ValidatingMockServer {
23 fn url(&self) -> Url;
26
27 fn path(&self, path: &str) -> Url;
32
33 fn status(&self) -> Vec<MatchResult>;
36
37 fn metrics(&self) -> MockServerMetrics;
39}
40
41pub trait StartMockServer {
43 fn start_mock_server(
46 &self,
47 catalog_entry: Option<&str>,
48 mock_server_config: Option<MockServerConfig>
49 ) -> Box<dyn ValidatingMockServer>;
50}
51
52#[async_trait]
54pub trait StartMockServerAsync {
55 async fn start_mock_server_async(
57 &self,
58 catalog_entry: Option<&str>,
59 mock_server_config: Option<MockServerConfig>
60 ) -> Box<dyn ValidatingMockServer>;
61}
62
63impl StartMockServer for RequestResponsePact {
64 fn start_mock_server(
65 &self,
66 _catalog_entry: Option<&str>,
67 mock_server_config: Option<MockServerConfig>
68 ) -> Box<dyn ValidatingMockServer> {
69 ValidatingHttpMockServer::start(self.boxed(), None, mock_server_config)
70 }
71}
72
73#[async_trait]
74impl StartMockServerAsync for RequestResponsePact {
75 async fn start_mock_server_async(
76 &self,
77 _catalog_entry: Option<&str>,
78 mock_server_config: Option<MockServerConfig>
79 ) -> Box<dyn ValidatingMockServer> {
80 ValidatingHttpMockServer::start_async(self.boxed(), None, mock_server_config).await
81 }
82}