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);

0 ответов

Другие вопросы по тегам