playwright 0.0.20

Playwright port to Rust
Documentation
use crate::imp::{core::*, prelude::*, request::Request, utils::Header};

#[derive(Debug)]
pub(crate) struct Route {
    channel: ChannelOwner,
    request: Weak<Request>
}

impl Route {
    pub(crate) fn try_new(ctx: &Context, channel: ChannelOwner) -> Result<Self, Error> {
        let Initializer { request } = serde_json::from_value(channel.initializer.clone())?;
        let request = get_object!(ctx, &request.guid, Request)?;
        Ok(Self { channel, request })
    }

    pub(crate) fn request(&self) -> Weak<Request> { self.request.clone() }

    pub(crate) async fn abort(&self, err_code: Option<&str>) -> Result<(), Arc<Error>> {
        let mut args = HashMap::new();
        if let Some(x) = err_code {
            args.insert("errCode", x);
        }
        let _ = send_message!(self, "abort", args);
        Ok(())
    }

    pub(crate) async fn fulfill(&self, args: FulfillArgs<'_, '_>) -> ArcResult<()> {
        let _ = send_message!(self, "fulfill", args);
        Ok(())
    }

    pub(crate) async fn r#continue(&self, args: ContinueArgs<'_, '_, '_>) -> ArcResult<()> {
        let _ = send_message!(self, "continue", args);
        Ok(())
    }
}

impl RemoteObject for Route {
    fn channel(&self) -> &ChannelOwner { &self.channel }
    fn channel_mut(&mut self) -> &mut ChannelOwner { &mut self.channel }
}

#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
struct Initializer {
    request: OnlyGuid
}

#[skip_serializing_none]
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct FulfillArgs<'a, 'b> {
    body: &'a str,
    is_base64: bool,
    pub(crate) status: Option<i32>,
    pub(crate) headers: Option<Vec<Header>>,
    pub(crate) content_type: Option<&'b str>
}

impl<'a, 'b> FulfillArgs<'a, 'b> {
    pub(crate) fn new(body: &'a str, is_base64: bool) -> Self {
        Self {
            body,
            is_base64,
            status: None,
            headers: None,
            content_type: None
        }
    }
}

#[skip_serializing_none]
#[derive(Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub(crate) struct ContinueArgs<'a, 'b, 'c> {
    pub(crate) url: Option<&'a str>,
    pub(crate) method: Option<&'b str>,
    pub(crate) headers: Option<Vec<Header>>,
    pub(crate) post_data: Option<&'c str>
}