s3-path 0.1.0

Describe paths inside an S3 bucket like working with std's Path and PathBuf.
Documentation

s3-path

Construct safe S3 keys (informally named paths in this library).

This library only allows the following characters to be used in path components:

  • [a..z], [A..Z], [0..9], -, _, .

The following path components are explicitly forbidden to avoid any path traversal when the S3 key is used as a filesystem path:

  • .
  • ..

Usage

fn owned() {
    let mut path = S3PathBuf::new();
    path.join("foo").unwrap();
    path.join("bar").unwrap();
    assert_that(path).has_display_value("foo/bar");

    let path = S3PathBuf::try_from(["foo/bar", "baz"]).unwrap();
    assert_that(path).has_display_value("foobar/baz");
    
    let path = S3PathBuf::try_from_str("foo/bar").unwrap();
    assert_that(path).has_display_value("foo/bar");
}

fn borrowed() {
    let path = S3Path::new([Cow::Borrowed("foo"), Cow::Borrowed("bar")]).unwrap();
    assert_that(path).has_display_value("foo/bar");
}

TODO

  • Check for maximum key limit? Should be 1024 bytes (of UTF-8) on Amazon S3. What about MinIO, Ceph, ...?