cdp_html_shot/
general_utils.rs1use std::sync::Arc;
2use anyhow::{anyhow, Result};
3use serde_json::{json, Value};
4use std::sync::atomic::{AtomicUsize, Ordering};
5
6use crate::transport::Transport;
7use crate::transport_actor::{TargetMessage, TransportResponse};
8
9pub(crate) static GLOBAL_ID_COUNTER: AtomicUsize = AtomicUsize::new(0);
10
11pub(crate) fn next_id() -> usize {
12 GLOBAL_ID_COUNTER.fetch_add(1, Ordering::SeqCst) + 1
13}
14
15pub(crate) fn serde_msg(msg: &TargetMessage) -> Value {
16 let message: Value = serde_json::from_str(msg.params["message"].as_str().unwrap().trim_matches('"')).unwrap();
17 message
18}
19
20pub(crate) async fn send_and_get_msg(
21 transport: Arc<Transport>,
22 msg_id: usize,
23 session_id: &str,
24 msg: String,
25) -> Result<TargetMessage> {
26 let (_, target_msg) = futures::try_join!(
27 transport.send(json!({
28 "id": next_id(),
29 "method": "Target.sendMessageToTarget",
30 "params": {
31 "sessionId": session_id,
32 "message": msg
33 }
34 })),
35 transport.get_target_msg(msg_id),
36 )?;
37
38 match target_msg {
39 TransportResponse::Target(res) => Ok(res),
40 other => Err(anyhow!("Unexpected transport response: {:?}", other)),
41 }
42}