Я пытаюсь использовать 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);