Skip to content

Rust utility for accessing both local and remote files through a unified async interface

License

Notifications You must be signed in to change notification settings

korrat/rust-cached-path

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rust-cached-path

crates.io Documentation MIT/Apache-2 licensed CI

The idea behind cached-path is to provide a unified simple async interface for accessing both local and remote files. This can be used behind other APIs that need to access files agnostic to where they are located.

Usage

For remote resources cached-path uses the ETAG to know when to update the cache. The path returned is the local path to the latest cached version:

use cached_path::cached_path;

let path = cached_path("https://github.com/epwalsh/rust-cached-path/blob/master/README.md").await?;
assert!(path.is_file());
# From the command line:
$ cached-path https://github.com/epwalsh/rust-cached-path/blob/master/README.md
/tmp/cache/055968a99316f3a42e7bcff61d3f590227dd7b03d17e09c41282def7c622ba0f.efa33e7f611ef2d163fea874ce614bb6fa5ab2a9d39d5047425e39ebe59fe782

For local files, the path returned is just the original path supplied:

use cached_path::cached_path;

let path = cached_path("README.md").await?;
assert_eq!(path.to_str().unwrap(), "README.md");
# From the command line:
$ cached-path https://github.com/epwalsh/rust-cached-path/blob/master/README.md
README.md

It's easy to customize the configuration when you need more control over the cache location or the HTTP client used to download files:

use cached_path::Cache;

let cache = Cache::builder()
    .root(std::env::temp_dir().join("my-cache/"))
    .connect_timeout(std::time::Duration::from_secs(3))
    .build()
    .await?;
let path = cache.cached_path("README.md").await?;
# From the command line:
$ cached-path --root /tmp/my-cache/ --connect-timeout 3 README.md
README.md

About

Rust utility for accessing both local and remote files through a unified async interface

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 96.5%
  • Makefile 3.5%