1pub struct Spider{
2 name: String,
3 allowed_domains: Vec<String>,
4 start_urls: Vec<String>,
5}
6
7pub trait Crawable {
8 fn name(&self) -> &String;
9 fn allowed_domains(&self) -> &Vec<String>;
10 fn start_urls(&self) -> &Vec<String>;
11 fn start_requests(&self);
12}
13
14impl Spider{
15 pub fn new(name: String, allowed_domains: Vec<String>, start_urls: Vec<String>) -> Self{
16 Spider{
17 name,
18 allowed_domains,
19 start_urls
20 }
21 }
22}
23
24impl Crawable for Spider{
25 fn name(&self) -> &String {
26 &self.name
27 }
28 fn allowed_domains(&self) -> &Vec<String> {
29 &self.allowed_domains
30 }
31 fn start_urls(&self) -> &Vec<String> {
32 &self.start_urls
33 }
34 fn start_requests(&self) {
35 for url in &self.start_urls{
36 println!("Crawling URL: {}", url);
37 }
38 }
39}