{"id":17306266,"url":"https://github.com/paolobarbolini/rusty-s3","last_synced_at":"2025-10-24T00:48:20.117Z","repository":{"id":37784235,"uuid":"316332928","full_name":"paolobarbolini/rusty-s3","owner":"paolobarbolini","description":"Simple pure Rust AWS S3 Client following a Sans-IO approach","archived":false,"fork":false,"pushed_at":"2025-03-23T16:01:58.000Z","size":292,"stargazers_count":124,"open_issues_count":8,"forks_count":25,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-31T23:31:58.745Z","etag":null,"topics":["aws","aws-sdk","hacktoberfest","minio","s3"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paolobarbolini.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-11-26T20:42:20.000Z","updated_at":"2025-03-23T16:02:00.000Z","dependencies_parsed_at":"2024-06-21T05:46:44.106Z","dependency_job_id":"719c9aa3-b776-4b8c-a801-b01d221438a0","html_url":"https://github.com/paolobarbolini/rusty-s3","commit_stats":{"total_commits":174,"total_committers":17,"mean_commits":"10.235294117647058","dds":"0.28735632183908044","last_synced_commit":"e65bc33d1cadecfde34fd5b71a9a3b317ba45ce8"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paolobarbolini%2Frusty-s3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paolobarbolini%2Frusty-s3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paolobarbolini%2Frusty-s3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paolobarbolini%2Frusty-s3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paolobarbolini","download_url":"https://codeload.github.com/paolobarbolini/rusty-s3/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247755557,"owners_count":20990620,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","aws-sdk","hacktoberfest","minio","s3"],"created_at":"2024-10-15T11:57:56.490Z","updated_at":"2025-10-24T00:48:20.108Z","avatar_url":"https://github.com/paolobarbolini.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# rusty-s3\n\n[![crates.io](https://img.shields.io/crates/v/rusty-s3.svg)](https://crates.io/crates/rusty-s3)\n[![Documentation](https://docs.rs/rusty-s3/badge.svg)](https://docs.rs/rusty-s3)\n[![dependency status](https://deps.rs/crate/rusty-s3/0.8.1/status.svg)](https://deps.rs/crate/rusty-s3/0.8.1)\n[![Rustc Version 1.81+](https://img.shields.io/badge/rustc-1.81+-lightgray.svg)](https://blog.rust-lang.org/2024/09/05/Rust-1.81.0/)\n[![CI](https://github.com/paolobarbolini/rusty-s3/workflows/CI/badge.svg)](https://github.com/paolobarbolini/rusty-s3/actions?query=workflow%3ACI)\n[![codecov](https://codecov.io/gh/paolobarbolini/rusty-s3/branch/main/graph/badge.svg?token=K0YPC21N8D)](https://codecov.io/gh/paolobarbolini/rusty-s3)\n\nSimple pure Rust AWS S3 Client following a Sans-IO approach, with a modern\nand rusty take onto s3's APIs.\n\nRequest signing and response parsing capabilities are provided for the\nmost common S3 actions, using AWS Signature Version 4.\n\nMinio compatibility tested on every commit by GitHub Actions.\n\n## Examples\n\n```rust\nuse std::env;\nuse std::time::Duration;\nuse rusty_s3::{Bucket, Credentials, S3Action, UrlStyle};\n\n// setting up a bucket\nlet endpoint = \"https://s3.dualstack.eu-west-1.amazonaws.com\".parse().expect(\"endpoint is a valid Url\");\nlet path_style = UrlStyle::VirtualHost;\nlet name = \"rusty-s3\";\nlet region = \"eu-west-1\";\nlet bucket = Bucket::new(endpoint, path_style, name, region).expect(\"Url has a valid scheme and host\");\n\n// setting up the credentials\nlet key = env::var(\"AWS_ACCESS_KEY_ID\").expect(\"AWS_ACCESS_KEY_ID is set and a valid String\");\nlet secret = env::var(\"AWS_SECRET_ACCESS_KEY\").expect(\"AWS_ACCESS_KEY_ID is set and a valid String\");\nlet credentials = Credentials::new(key, secret);\n\n// signing a request\nlet presigned_url_duration = Duration::from_secs(60 * 60);\nlet action = bucket.get_object(Some(\u0026credentials), \"duck.jpg\");\nprintln!(\"GET {}\", action.sign(presigned_url_duration));\n```\n\nMore examples can be found in the examples directory on GitHub.\n\n## Supported S3 actions\n\n* Bucket level methods\n    * [`CreateBucket`][createbucket]\n    * [`DeleteBucket`][deletebucket]\n    * [`HeadBucket`][headbucket]\n* Basic methods\n    * [`HeadObject`][headobject]\n    * [`GetObject`][getobject]\n    * [`PutObject`][putobject]\n    * [`DeleteObject`][deleteobject]\n    * [`DeleteObjects`][deleteobjects]\n    * [`ListObjectsV2`][listobjectsv2]\n* Multipart upload\n    * [`CreateMultipartUpload`][completemultipart]\n    * [`UploadPart`][uploadpart]\n    * [`ListParts`][listparts]\n    * [`CompleteMultipartUpload`][completemultipart]\n    * [`AbortMultipartUpload`][abortmultipart]\n\n[abortmultipart]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\n[completemultipart]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\n[listparts]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\n[createbucket]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\n[deletebucket]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html\n[headbucket]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html\n[createmultipart]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\n[deleteobject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html\n[deleteobjects]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html\n[getobject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\n[headobject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html\n[listobjectsv2]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html\n[putobject]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\n[uploadpart]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart\n\n### Development\n\n```zsh\ndocker run -p 9000:9000 -p 9001:9001 minio/minio:RELEASE.2024-12-18T13-15-44Z server /data --console-address \":9001\"\n```\n\nIn another terminal\n```zsh\ncargo test --lib # or other specific command\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaolobarbolini%2Frusty-s3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaolobarbolini%2Frusty-s3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaolobarbolini%2Frusty-s3/lists"}