1use crate::transport::{TargetMessage, Transport, TransportResponse, next_id};
2use anyhow::{Result, anyhow};
3use serde_json::{Value, json};
4use std::sync::Arc;
5
6pub(crate) fn serde_msg(msg: &TargetMessage) -> Result<Value> {
7 let str_msg = msg.params["message"]
8 .as_str()
9 .ok_or_else(|| anyhow!("Invalid message format"))?;
10 Ok(serde_json::from_str(str_msg)?)
11}
12
13pub(crate) async fn send_and_get_msg(
14 transport: Arc<Transport>,
15 msg_id: usize,
16 session_id: &str,
17 msg: String,
18) -> Result<TargetMessage> {
19 let send_fut = transport.send(json!({
20 "id": next_id(),
21 "method": "Target.sendMessageToTarget",
22 "params": { "sessionId": session_id, "message": msg }
23 }));
24 let recv_fut = transport.get_target_msg(msg_id);
25
26 let (_, target_msg) = futures_util::try_join!(send_fut, recv_fut)?;
27
28 match target_msg {
29 TransportResponse::Target(res) => Ok(res),
30 other => Err(anyhow!("Unexpected response: {:?}", other)),
31 }
32}