cdp-html-shot 0.2.4

A Rust library for capturing HTML screenshots using CDP.
Documentation
use crate::transport::{TargetMessage, Transport, TransportResponse, next_id};
use anyhow::{Result, anyhow};
use serde_json::{Value, json};
use std::sync::Arc;

pub(crate) fn serde_msg(msg: &TargetMessage) -> Result<Value> {
    let str_msg = msg.params["message"]
        .as_str()
        .ok_or_else(|| anyhow!("Invalid message format"))?;
    Ok(serde_json::from_str(str_msg)?)
}

pub(crate) async fn send_and_get_msg(
    transport: Arc<Transport>,
    msg_id: usize,
    session_id: &str,
    msg: String,
) -> Result<TargetMessage> {
    let send_fut = transport.send(json!({
        "id": next_id(),
        "method": "Target.sendMessageToTarget",
        "params": { "sessionId": session_id, "message": msg }
    }));
    let recv_fut = transport.get_target_msg(msg_id);

    let (_, target_msg) = futures_util::try_join!(send_fut, recv_fut)?;

    match target_msg {
        TransportResponse::Target(res) => Ok(res),
        other => Err(anyhow!("Unexpected response: {:?}", other)),
    }
}