1use serde::{Deserialize, Serialize};
4use url::Url;
5
6use crate::crawl::{RobotsFile, SitemapSummary};
7use crate::output::{CrawlOutput, StopReason};
8use crate::page::PageRecord;
9
10#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
11pub struct Snapshot {
12 pub origin: Url,
13 pub stop: StopReason,
14 pub pages: Vec<PageRecord>,
15 pub robots: Option<RobotsFile>,
16 pub sitemap: SitemapSummary,
17}
18
19impl Snapshot {
20 pub fn from_output(out: &CrawlOutput) -> Snapshot {
22 Snapshot {
23 origin: out.origin.clone(),
24 stop: out.stop.clone(),
25 pages: out.pages.clone(),
26 robots: out.robots.clone(),
27 sitemap: out.sitemap.clone(),
28 }
29 }
30
31 pub fn from_output_owned(out: CrawlOutput) -> Snapshot {
33 Snapshot {
34 origin: out.origin,
35 stop: out.stop,
36 pages: out.pages,
37 robots: out.robots,
38 sitemap: out.sitemap,
39 }
40 }
41}