Nested Future Chain не называет внутреннего будущего для Rusoto RusotoFuture
Я пытаюсь использовать 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);