Skip to main content

codoseo_core/
snapshot.rs

1//! What is kept of a crawl for later comparison.
2
3use 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    /// Everything the diff needs; the link graph is not kept.
21    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    /// Like [`Snapshot::from_output`], but moves the pages out instead of cloning them.
32    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}