millipede_core/crawler/
start.rs1use crate::{errors::CrawlError, request::Request};
4
5pub trait IntoStartRequest {
7 fn into_start_request(self) -> Result<Request, CrawlError>;
9}
10
11impl IntoStartRequest for Request {
12 fn into_start_request(self) -> Result<Request, CrawlError> {
13 Ok(self)
14 }
15}
16
17impl IntoStartRequest for url::Url {
18 fn into_start_request(self) -> Result<Request, CrawlError> {
19 Ok(Request::get(self).build()?)
20 }
21}
22
23impl IntoStartRequest for &str {
24 fn into_start_request(self) -> Result<Request, CrawlError> {
25 Ok(Request::get(self).build()?)
26 }
27}
28
29impl IntoStartRequest for String {
30 fn into_start_request(self) -> Result<Request, CrawlError> {
31 Ok(Request::get(self).build()?)
32 }
33}
34
35pub trait IntoStartRequests {
37 fn into_start_requests(self) -> Result<Vec<Request>, CrawlError>;
39}
40
41macro_rules! impl_single_start_requests {
42 ($($ty:ty),+ $(,)?) => {$(
43 impl IntoStartRequests for $ty {
44 fn into_start_requests(self) -> Result<Vec<Request>, CrawlError> {
45 Ok(vec![self.into_start_request()?])
46 }
47 }
48 )+};
49}
50
51impl_single_start_requests!(Request, url::Url, &str, String);
52
53impl<T: IntoStartRequest> IntoStartRequests for Vec<T> {
54 fn into_start_requests(self) -> Result<Vec<Request>, CrawlError> {
55 self.into_iter()
56 .map(IntoStartRequest::into_start_request)
57 .collect()
58 }
59}
60
61impl<T: IntoStartRequest, const N: usize> IntoStartRequests for [T; N] {
62 fn into_start_requests(self) -> Result<Vec<Request>, CrawlError> {
63 self.into_iter()
64 .map(IntoStartRequest::into_start_request)
65 .collect()
66 }
67}
68
69impl<T: IntoStartRequest + Clone> IntoStartRequests for &[T] {
70 fn into_start_requests(self) -> Result<Vec<Request>, CrawlError> {
71 self.iter()
72 .cloned()
73 .map(IntoStartRequest::into_start_request)
74 .collect()
75 }
76}