extern crate s3;
extern crate snafu;
use snafu::{ResultExt, Snafu};
use std::str;
use s3::bucket::Bucket;
use s3::credentials::Credentials;
const BUCKET: &str = "drazen-test-bucket-2";
const MESSAGE: &str = "I want to go to S3";
const REGION: &str = "us-east-1";
#[derive(Debug, Snafu)]
pub enum Error {
InvalidRegion { source: s3::region::Error },
BucketCreate { source: s3::bucket::Error },
BucketPut { source: s3::bucket::Error },
BucketGet { source: s3::bucket::Error },
BucketPutTag { source: s3::bucket::Error },
BucketGetTag { source: s3::bucket::Error },
BucketLocation { source: s3::bucket::Error },
}
type S3Result<T, E = Error> = std::result::Result<T, E>;
pub fn main() -> S3Result<()> {
let region = REGION.parse().context(InvalidRegion)?;
let credentials = Credentials::default();
let bucket = Bucket::new(BUCKET, region, credentials).context(BucketCreate)?;
let (_, code) = bucket.put_object("test_file", MESSAGE.as_bytes(), "text/plain").context(BucketPut)?;
assert_eq!(200, code);
let (data, code) = bucket.get_object("test_file").context(BucketGet)?;
let string = str::from_utf8(&data).unwrap();
assert_eq!(200, code);
assert_eq!(MESSAGE, string);
println!("{:?}", bucket.location().context(BucketLocation)?);
bucket.put_object_tagging("test_file", &[("test", "tag")]).context(BucketPutTag)?;
println!("Tags set");
let (tags, _status) = bucket.get_object_tagging("test_file").context(BucketGetTag)?;
println!("{:?}", tags);
Ok(())
}