Crate file_with_meta

Source
Expand description

Store a file’s metadata for caching purposes.

The FileHttpMetadata structure may be serialized and stored in a JSON file alongside the real file, e.g. one with “.meta” appended to the file name. Then either the match_meta function may be used directly, or the build_req one may be used to modify an HTTP request, adding the necessary headers to make sure that the file is not downloaded if there have been no changes on the remote server.

Example for checking whether a file needs to be downloaded:

use std::fs::{self, File};


let dst = destdir.join("data.json");
let dst_meta = destdir.join("data.json.meta");
let (req, stored_meta) = file_with_meta::build_req(
    agent.get("https://example.com/"),
    &dst,
    &dst_meta,
)?;
let resp = req.call()?;
match resp.status() {
    304 => println!("Nothing was fetched"),
    _ => {
        println!("Storing the content");
        /* ... */

        println!("Updating the file's metadata");
        let meta = file_with_meta::FileHttpMetadata::from_file(&dst)?;
        fs::write(&dst_meta, serde_json::to_string(&meta).unwrap())?;
    }
};

Example for checking whether a file has changed since its metadata was last updated:

let dst = "/path/to/file.dat";
let dst_meta = "/path/to/file.dat.meta";

match file_with_meta::match_meta(&dst, &dst_meta)?.is_some() {
    true => println!("No change"),
    false => println!("Somebody touched our file, recreate it?"),
};

The match_meta_with_source function may be used to additionally make sure that a “source” file has not been modified since this file was last generated from its data.

Structs§

FileHttpMetadata
Information about a single file’s last modification time and, if specified, some relevant HTTP headers returned by the server that the file was fetched from.
MetadataFormat
Information about the format of the JSON-serialized metadata.
MetadataFormatVersion
The version of the format of the serialized metadata.

Enums§

Error
An error that occurred during processing the metadata.

Functions§

build_req
Add the If-Modified-Since and/or If-None-Match headers to an HTTP request if needed.
match_meta
Verify that a file has not been changed since the last time the metadata was stored.
match_meta_with_source
Verify that a file has not been changed, and additionally verify that its source file, specified by the src local path, has also not been changed.
mtime_to_unix
Unwrap a Metadata object’s last modified timestamp, assume it may be converted to a Unix timestamp, and return the number of seconds since the Unix epoch.