7 releases

new 1.0.0-beta.7 Apr 26, 2025
0.1.0 Apr 25, 2025

#308 in Images

48 downloads per month

MIT license

14KB
204 lines

s3uri: AWS S3 URIs in Rust

s3uri is a Rust library with structs and functions for building and parsing Amazon Web Services S3 URIs.

Installation

cargo add s3uri

Examples

Parsing a URI

s3uri::from_uri parses a string URI and returns a s3uri::S3Uri struct with the bucket name and key set.

let uri = s3uri::from_uri("s3://circus/images/clowns.jpg").unwrap();

assert_eq!(uri.bucket, "circus");
assert_eq!(uri.key, "images/clowns.jpg");

Creating a new URI

To create a new URI from scratch, pass the bucket name to s3uri::from_bucket to get a s3uri::S3Uri struct.

let uri = s3uri::from_bucket("circus");

assert_eq!(uri, "s3://circus/");
assert_eq!(uri.bucket, "circus");
assert_eq!(uri.key, "");

Joining keys and key prefixes

Call s3uri::S3Uri::join() to build up the key. Separators will be normalised and added between each segment as-needed.

let images_prefix = s3uri::from_bucket("circus")
    .join("images/");

assert_eq!(images_prefix, "s3://circus/images/");

let clowns_uri = images_prefix
    .join("staff")
    .join("clowns.jpg");

assert_eq!(clowns_uri, "s3://circus/images/staff/clowns.jpg");

Check if a key is a prefix

Call s3uri::S3Key::is_prefix() to check if a key is a prefix (i.e. ends with a /) or not.

let images_uri = s3uri::from_bucket("circus")
    .join("images/");

assert!(images_uri.key.is_prefix());

let clowns_uri = images_uri.join("clowns.jpg");
assert!(!clowns_uri.key.is_prefix());

Key leaf

Call s3uri::S3Key::leaf() to get the segment of the key after the final separator.

let images_uri = s3uri::from_bucket("circus")
    .join("images/");

assert_eq!(images_uri.key.leaf(), Some("images/"));

let clowns_uri = images_uri
    .join("staff")
    .join("clowns.jpg");

assert_eq!(clowns_uri.key.leaf(), Some("clowns.jpg"));

Author

Hello! 👋 I'm Cariad Eccleston. You can find me at cariad.earth, github.com/cariad, linkedin.com/in/cariad and @cariad.earth on Bluesky.

Dependencies

~2–3MB
~53K SLoC