abcperf_noop/
lib.rs

1use std::{collections::HashMap, time::Duration};
2
3use abcperf_client_proxy::Signature;
4use abcperf_generic_client::cs::{typed::TypedCSTrait, CSTrait};
5use abcperf_generic_client::{proxy::ConfigTrait, CustomClientConfig};
6use payload::{ReqPayload, RespPayload};
7use serde::{Deserialize, Serialize};
8use server::NoopServer;
9use shared_ids::ClientId;
10
11mod payload;
12mod server;
13
14#[derive(Clone, Serialize, Deserialize, Debug)]
15pub struct MyClientConfig {
16    request_payload: u64,
17    response_payload: u64,
18
19    mode: CustomClientConfig,
20
21    fallback_timeout: f64,
22}
23
24impl ConfigTrait for MyClientConfig {
25    fn fallback_timeout(&self) -> Duration {
26        Duration::from_secs_f64(self.fallback_timeout)
27    }
28}
29
30impl From<MyClientConfig> for HashMap<String, String> {
31    fn from(config: MyClientConfig) -> Self {
32        let MyClientConfig {
33            request_payload,
34            response_payload,
35            mode,
36            fallback_timeout,
37        } = config;
38
39        let mut map: Self = mode.into();
40        assert!(map
41            .insert("request_payload".to_string(), request_payload.to_string())
42            .is_none());
43        assert!(map
44            .insert("response_payload".to_string(), response_payload.to_string())
45            .is_none());
46        assert!(map
47            .insert("fallback_timeout".to_string(), fallback_timeout.to_string())
48            .is_none());
49        map
50    }
51}
52
53impl AsRef<CustomClientConfig> for MyClientConfig {
54    fn as_ref(&self) -> &CustomClientConfig {
55        &self.mode
56    }
57}
58
59pub const VERSION: &str = env!("CARGO_PKG_VERSION");
60
61pub type NoopServerProxy<CS> = NoopServer<CS, ((ClientId, ReqPayload), Box<[Signature]>)>;
62pub fn server<CS: CSTrait>(cs: TypedCSTrait<CS, ReqPayload, RespPayload>) -> NoopServerProxy<CS> {
63    NoopServerProxy::new(cs)
64}
65
66pub type NoopServerNoProxy<CS> = NoopServer<CS, (ClientId, ReqPayload)>;
67pub fn server_no_proxy<CS: CSTrait>(
68    cs: TypedCSTrait<CS, ReqPayload, RespPayload>,
69) -> NoopServerNoProxy<CS> {
70    NoopServerNoProxy::new(cs)
71}
72
73pub type ClientEmulatorProxy<CS> =
74    abcperf_generic_client::proxy::GenericClient<ReqPayload, RespPayload, MyClientConfig, CS>;
75pub fn client_emulator<CS: CSTrait>(
76    cs: TypedCSTrait<CS, ReqPayload, RespPayload>,
77) -> ClientEmulatorProxy<CS> {
78    ClientEmulatorProxy::new(cs)
79}
80
81pub type ClientEmulatorNoProxy<CS> =
82    abcperf_generic_client::no_proxy::GenericClient<ReqPayload, RespPayload, MyClientConfig, CS>;
83pub fn client_emulator_no_proxy<CS: CSTrait>(
84    cs: TypedCSTrait<CS, ReqPayload, RespPayload>,
85) -> ClientEmulatorNoProxy<CS> {
86    ClientEmulatorNoProxy::new(cs)
87}