write_raw/
write_raw.rs

1use chrono::prelude::*;
2
3use warc::WarcHeader;
4use warc::{BufferedBody, RawRecordHeader, Record, RecordType, WarcWriter};
5
6fn main() -> Result<(), std::io::Error> {
7    let date = Utc::now().to_rfc3339_opts(SecondsFormat::Secs, true);
8    let body = format!("wrote to the file on {}", date);
9    let body = body.into_bytes();
10
11    let headers = RawRecordHeader {
12        version: "1.0".to_owned(),
13        headers: vec![
14            (
15                WarcHeader::RecordID,
16                Record::<BufferedBody>::generate_record_id().into_bytes(),
17            ),
18            (
19                WarcHeader::WarcType,
20                RecordType::WarcInfo.to_string().into_bytes(),
21            ),
22            (WarcHeader::Date, date.into_bytes()),
23            (WarcHeader::IPAddress, "127.0.0.1".to_owned().into_bytes()),
24            (
25                WarcHeader::ContentLength,
26                body.len().to_string().into_bytes(),
27            ),
28        ]
29        .into_iter()
30        .collect(),
31    };
32
33    let mut file = WarcWriter::from_path("warc_example.warc")?;
34
35    let bytes_written = file.write_raw(headers, &body)?;
36
37    println!("{} bytes written.", bytes_written);
38
39    Ok(())
40}