playwright_cdp/
request.rs1use crate::error::Result;
4use crate::network::NetworkStore;
5use crate::response::Response;
6use crate::types::Headers;
7use std::sync::{Arc, Weak};
8
9#[derive(Clone)]
11pub struct Request {
12 inner: Arc<RequestInner>,
13}
14
15struct RequestInner {
16 url: String,
17 method: String,
18 headers: Headers,
19 resource_type: String,
20 request_id: String,
21 is_navigation: bool,
22 store: Weak<NetworkStore>,
23}
24
25impl Request {
26 pub(crate) fn new(
27 url: String,
28 method: String,
29 headers: Headers,
30 resource_type: String,
31 request_id: String,
32 is_navigation: bool,
33 store: Weak<NetworkStore>,
34 ) -> Self {
35 Self {
36 inner: Arc::new(RequestInner {
37 url,
38 method,
39 headers,
40 resource_type,
41 request_id,
42 is_navigation,
43 store,
44 }),
45 }
46 }
47
48 pub fn url(&self) -> &str {
49 &self.inner.url
50 }
51
52 pub fn method(&self) -> &str {
53 &self.inner.method
54 }
55
56 pub fn headers(&self) -> &Headers {
57 &self.inner.headers
58 }
59
60 pub fn resource_type(&self) -> &str {
61 &self.inner.resource_type
62 }
63
64 pub fn is_navigation_request(&self) -> bool {
65 self.inner.is_navigation
66 }
67
68 pub async fn response(&self) -> Result<Option<Response>> {
70 Ok(self
71 .inner
72 .store
73 .upgrade()
74 .and_then(|s| s.get_response(&self.inner.request_id)))
75 }
76}