我正在尝试使用rusoto
通过ListObjects
的板条箱上的S3
调用来获取文件列表,但是当我将其链接到下一组期货时,期货似乎没有被要求,我已经尝试过很多配置相同的链而没有运气
最后,GetObject
返回一个RusotoFuture<GetObjectOutput,_>
,我正尝试通过期货消费它,因此所有这些行为都可以一起使用,但是内部的未来没有被调用,我的怀疑是我包装了据我了解,String
中的最后一个futures::future::ok
无法正常工作
我正在尝试以下
let task = s3_client1
.list_objects(ListObjectsRequest {
bucket: ds.bucket.clone(),
prefix: Some("meta/datastores".to_owned()),
..Default::default()
})
.map(|list_objects| list_objects.contents.unwrap())
.map_err(|_| ())
.and_then(|objects| {
// println!("objects {:?}", objects);
stream::iter_ok(objects)
.map(|file_object| file_object.clone().key.unwrap())
.and_then(move |file_key| {
println!("filerino {:?}", &file_key);
s3_client2
.get_object(GetObjectRequest {
bucket: ds.bucket.clone(),
key: file_key,
..Default::default()
})
.map_err(|e| {
println!("Some error!!!! {:?}", e);
()
})
.map(|object_output| object_output.body.unwrap())
.map(|body| body.concat2())
.map(|all_object| {
all_object.map_err(|e| ()).and_then(|bytes| {
let result = String::from_utf8(bytes).unwrap();
println!("body: {:?}", &result);
futures::future::ok::<String, ()>(result)
})
})
})
.collect()
})
.map_err(|e| {
println!("eeeerroor {:?}", e);
()
})
.map(|_x| {
// println!("done! {:?}", x);
println!("done!");
});
tokio::spawn(task);