blog.bouzuya.net

2026-05-09 bouzuya-firestore-client に sealed trait を追加

bouzuya/bouzuya-firestore-client#[allow(private_bounds)] を不要になるよう修正した。

bouzuya-firestore-client は Rust で書かれた Node.js Firestore SDK に近いインタフェースを持つ Firestore Client 。

#[allow(private_bounds)] を必要としていたのは IntoFilter trait と IntoFieldPath trait を使用していた箇所。これらの trait を外部から実装されないように private にしていたが、一方で pub fn の引数のトレイト境界として使用していた。

Sealed trait を追加して対応した。

Sealed trait は Rust API ガイドラインにも記載されているテクニックのひとつで、 private な mod の中に pub な trait を定義し、それを super trait とすることで実装できなくする方法。 https://rust-lang.github.io/api-guidelines/future-proofing.html#sealed-traits-protect-against-downstream-implementations-c-sealed

なんとなくこれでいいんだろうか感はあるが、一応 trait は pub であり、警告を回避できるし、一般的なパターンではある。


下の子の図書館カードをつくった。もう随分前から貸出・返却はできるようになっていたけど、ぼくのカードで扱っていた。来年には小学生だし……と思ってつくった。上の子も似たような時期だったかな……。


今日のコミット。