mirror of
https://github.com/minio/minio-rs.git
synced 2025-12-06 15:26:51 +08:00
Add bucket exists API
This commit is contained in:
parent
b63c820c66
commit
a40a6e15ed
12
src/main.rs
12
src/main.rs
@ -17,17 +17,23 @@ fn main() {
|
||||
rt::run(rt::lazy(|| {
|
||||
// let c = get_local_default_server();
|
||||
let c = minio::Client::get_play_client();
|
||||
let bucket = "yyy";
|
||||
|
||||
let region_req = c
|
||||
.get_bucket_location("yyy")
|
||||
.get_bucket_location(bucket)
|
||||
.map(|res| println!("{}", res.to_string()))
|
||||
.map_err(|err| println!("{:?}", err));
|
||||
|
||||
let del_req = c
|
||||
.delete_bucket("yyy")
|
||||
.delete_bucket(bucket)
|
||||
.map(|_| println!("Deleted!"))
|
||||
.map_err(|err| println!("del err: {:?}", err));
|
||||
|
||||
del_req.join(region_req).map(|_| ())
|
||||
let buc_exists_req = c
|
||||
.bucket_exists(bucket)
|
||||
.map(move |e| println!("Bucket {} exists: {}", bucket, e))
|
||||
.map_err(|err| println!("exists err: {:?}", err));
|
||||
|
||||
del_req.join3(region_req, buc_exists_req).map(|_| ())
|
||||
}));
|
||||
}
|
||||
|
||||
75
src/minio.rs
75
src/minio.rs
@ -146,7 +146,32 @@ impl Client {
|
||||
println!("signout: {:?}", sign_hdrs);
|
||||
let req_result = api::mk_request(&s3_req, &self, &sign_hdrs);
|
||||
let conn_client = self.conn_client.clone();
|
||||
run_req_future(req_result, conn_client)
|
||||
future::result(req_result)
|
||||
.map_err(|e| Err::HttpErr(e))
|
||||
.and_then(move |req| conn_client.make_req(req).map_err(|e| Err::HyperErr(e)))
|
||||
.and_then(|resp| {
|
||||
let st = resp.status();
|
||||
if st.is_success() {
|
||||
Ok(resp)
|
||||
} else {
|
||||
Err(Err::RawSvcErr(st, resp))
|
||||
}
|
||||
})
|
||||
.or_else(|err| {
|
||||
future::err(err)
|
||||
.or_else(|x| match x {
|
||||
Err::RawSvcErr(st, resp) => Ok((st, resp)),
|
||||
other_err => Err(other_err),
|
||||
})
|
||||
.and_then(|(st, resp)| {
|
||||
resp.into_body()
|
||||
.concat2()
|
||||
.map_err(|err| Err::HyperErr(err))
|
||||
.and_then(move |chunk| {
|
||||
Err(Err::FailStatusCodeErr(st, chunk.into_bytes()))
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
pub fn get_bucket_location(&self, b: &str) -> impl Future<Item = Region, Error = Err> {
|
||||
@ -184,36 +209,30 @@ impl Client {
|
||||
};
|
||||
self.signed_req_future(s3_req).and_then(|_| Ok(()))
|
||||
}
|
||||
}
|
||||
|
||||
fn run_req_future(
|
||||
req_result: http::Result<Request<Body>>,
|
||||
c: ConnClient,
|
||||
) -> impl Future<Item = Response<Body>, Error = Err> {
|
||||
future::result(req_result)
|
||||
.map_err(|e| Err::HttpErr(e))
|
||||
.and_then(move |req| c.make_req(req).map_err(|e| Err::HyperErr(e)))
|
||||
.and_then(|resp| {
|
||||
let st = resp.status();
|
||||
if st.is_success() {
|
||||
Ok(resp)
|
||||
} else {
|
||||
Err(Err::RawSvcErr(st, resp))
|
||||
pub fn bucket_exists(&self, b: &str) -> impl Future<Item = bool, Error = Err> {
|
||||
let s3_req = S3Req {
|
||||
method: Method::HEAD,
|
||||
bucket: Some(b.to_string()),
|
||||
object: None,
|
||||
headers: HeaderMap::new(),
|
||||
query: HashMap::new(),
|
||||
body: Body::empty(),
|
||||
ts: time::now_utc(),
|
||||
};
|
||||
self.signed_req_future(s3_req).then(|res| match res {
|
||||
Ok(_) => Ok(true),
|
||||
Err(Err::FailStatusCodeErr(st, b)) => {
|
||||
let code = st.as_u16();
|
||||
if code == 404 {
|
||||
Ok(false)
|
||||
} else {
|
||||
Err(Err::FailStatusCodeErr(st, b))
|
||||
}
|
||||
}
|
||||
Err(err) => Err(err),
|
||||
})
|
||||
.or_else(|err| {
|
||||
future::err(err)
|
||||
.or_else(|x| match x {
|
||||
Err::RawSvcErr(st, resp) => Ok((st, resp)),
|
||||
other_err => Err(other_err),
|
||||
})
|
||||
.and_then(|(st, resp)| {
|
||||
resp.into_body()
|
||||
.concat2()
|
||||
.map_err(|err| Err::HyperErr(err))
|
||||
.and_then(move |chunk| Err(Err::FailStatusCodeErr(st, chunk.into_bytes())))
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn b2s(b: Bytes) -> Result<String, Err> {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user