blog.bouzuya.net

2026-01-16 n 度目の FirestoreClient 実装

今日は bouzuya/tsukota-web の FirestoreClient を実装。

何度目かの FirestoreClient の実装。今回は DocumentListDocumentsResponse などを wrap せずに露出させる方針をとってみた。これらの型をそのまま出すので deserialize も別メソッドにした。 deserialize が別メソッドなので serialize も別メソッドに。

まだきちんと試していないけど、次のようなインタフェースになる想定。

let client = firestore_client::FirestoreClient::connect(
  firestore_client::path::DatabaseName::from_project_id("project1")?
)?;

client.create_document(
    firestore_client::path::DocumentPath::from_str("col1/doc1")?,
    client.serialize(&value)?
).await?;

let firestore_client::google::firestore::v1::ListDocumentsResponse {
  documents,
  next_page_token
} = client.list_documents(
    firestore_client::path::CollectionPath::from_str("col1")?,
    None, // next_page_token
).await?;

これ系の即興での実装は Transaction まわりで面倒になってやめてしまいがち。あまり凝らずにそれを使うコードに注力したい。

明日は crates:serde-firestore-value のバージョンアップなどをしておかないとまずそう。


今日のコミット。