cargo_fixture/
client_fixture.rs1use serde::Serialize;
2
3use crate::{
4 rpc_socket::{ConnectionType, Request, RpcSocket},
5 Error, Result,
6};
7
8pub struct FixtureClient {
12 socket: RpcSocket,
13}
14
15impl FixtureClient {
16 pub async fn connect() -> Result<Self> {
18 RpcSocket::connect(ConnectionType::Fixture)
19 .await
20 .map(|socket| Self { socket })
21 }
22
23 pub async fn set_env_var(
25 &mut self,
26 name: impl Into<String>,
27 value: impl Into<String>,
28 ) -> Result<()> {
29 let name = name.into();
30 let value = value.into();
31
32 if name.is_empty() || name.contains('=') || name.contains('\0') || value.contains('\0') {
33 return Err(Error::InvalidSetEnv);
34 }
35
36 let req = Request::SetEnv { name, value };
37 self.socket.call(req).await?.as_ok()
38 }
39
40 pub async fn set_env_vars(
42 &mut self,
43 vars: impl IntoIterator<Item = (impl Into<String>, impl Into<String>)>,
44 ) -> Result<()> {
45 for (name, value) in vars {
47 self.set_env_var(name, value).await?;
48 }
49
50 Ok(())
51 }
52
53 pub async fn set_extra_cargo_test_args(
58 &mut self,
59 args: impl IntoIterator<Item = impl Into<String>>,
60 ) -> Result<()> {
61 let req = Request::SetExtraTestArgs {
62 args: args.into_iter().map(Into::into).collect(),
63 };
64 self.socket.call(req).await?.as_ok()
65 }
66
67 pub async fn set_extra_test_binary_args(
71 &mut self,
72 args: impl IntoIterator<Item = impl Into<String>>,
73 ) -> Result<()> {
74 let req = Request::SetExtraHarnessArgs {
75 args: args.into_iter().map(Into::into).collect(),
76 };
77 self.socket.call(req).await?.as_ok()
78 }
79
80 pub async fn set_value(&mut self, key: impl Into<String>, value: impl Serialize) -> Result<()> {
86 let value = serde_json::to_value(value)?;
87 let req = Request::SetKeyValue {
88 key: key.into(),
89 value,
90 };
91 self.socket.call(req).await?.as_ok()
92 }
93
94 pub async fn set_exec(
98 &mut self,
99 exec: impl IntoIterator<Item = impl Into<String>>,
100 ) -> Result<()> {
101 let req = Request::SetExec {
102 exec: exec.into_iter().map(Into::into).collect::<Vec<_>>(),
103 };
104 self.socket.call(req).await?.as_ok()
105 }
106
107 pub async fn ready(&mut self) -> Result<bool> {
112 self.socket.call(Request::Ready).await?.as_tests_finished()
113 }
114}