cdp_html_shot/
utils.rs

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}