rusoto が async/.await 対応したのをきっかけにさわってみた雑感
タイムラインに ↓ が流れてきたのでこれはやらねば async/.await 対応 してみての雑感です。
rusoto 0.43.0-beta.1 is available now with async/.await support, please help test! 💜
— iliana destroyer of worlds 🏳️⚧️ (@ilianathewitch) 2020年2月7日
here's a blog post about the near-term future of rusoto https://t.co/fmZkbH7pys #rustlang
雑感
- 感触はよさげ。
.await?
でResult
型もむけたりする .await
忘れが罠臭い。コンパイルできるし起動できるがスルーされるOption::unwap_or_else
とかがちょっとつらそう? 回避はできるし、まだわかりきってない可能性ありStream
trait の実装はあきらめた。Pin
とかUnpin
とかPoll
をわかってないと分かったのでいつか再チャレンジ
Stream を crate でどうにかしてもらった
Stream の様変わりがすごくて再実装できず、結局↓を使った https://t.co/5omvcsbCe1
— rohki (@r_ohki) 2020年2月11日
Kinesis Stream って名前である以上どうしても Stream
にしたかったので、調べたら async-stream を見つけられました。
実際には以下のよう使いました。
pub fn stream(mut self) -> impl Stream<Item = Result<GetRecordsOutput, Error>> { try_stream! { loop { if let Some(current) = &self.token { let r = self.get_records(current).await?; self.token = r.next_shard_iterator.clone(); yield r; } else { let next = self.get_iterator_token().await?; self.token = Some(next); continue; } } } }
k-iter/kinesis.rs at 94c79facb6e2459eedf3ce85a40dab034007f129 · ROki1988/k-iter · GitHub
私がつかめてない Stream
と async/.await
の関係性のところにするっと入ってくれました。
個人的には前よりもすっきりした印象を持ってます。
つづく
まだ 0.43.0-beta.1
なので注視しつつ、折を見て master に merge してきます。
ここ最近コード書いてなくてさび付いてるかなーとおもったんすが、まだ何とかなってました。
何とかなるぐらい Rust のコンパイルエラーとか fmt とか clippy が優秀ってのもある。ありがたし。