blog.bouzuya.net

2024-12-17 健康診断

健康診断を終えた。

8,000 円だった。 7,000 円と聞いていたような気がしたけど 8,000 円だった。……という話をするたびに「安いな」「安いね」などと言われ、よく分からない。会社から提示された選択肢が実質そこだけだったし、オプションをすべてつけずに実施したらそうなっただけなんだけど。みんなオプションをつけたり、つけなくてももっと高い施設だったりするんだろうか。

バリウムは 2 回目だけど、相変わらずグルングルンしていた。流れ作業でアレをやりコレをやり……だった。

思ったほど体調不良にはならなかった。健康診断後の食事では自分では注文することはないクラムチャウダーを飲んだ。嫌いというわけではないけど、あまり選ぼうと思わない。こういう機会があるのは良いかもしれない。自分で選ぶとどうしても偏りが出てしまうので。


bouzuya/rust-sandbox の user-api 。そぼくに作ろうと思っていたはずなんだけど、テストを書こうとしたらテストを書けるように trait を入れて……とどんどん大げさになってしまった。なんだかな。

昨日 (2024-12-16) も書いたけど、 crates:argon2 の例が消えてしまうのがもったいないので書いている。最近は test を書いていなかったので axum の test を入れるようにしている。

axum の test 用の util を他のリポジトリから引っ張ってきたが便利だ。逆にないと面倒くさい。

#[cfg(test)]
mod tests {
    #[axum::async_trait]
    pub(crate) trait ResponseExt {
        async fn into_body_string(self) -> anyhow::Result<String>;
        async fn into_body_as_json<T: serde::de::DeserializeOwned>(self) -> anyhow::Result<T>;
    }

    #[axum::async_trait]
    impl ResponseExt for axum::http::Response<axum::body::Body> {
        async fn into_body_string(self) -> anyhow::Result<String> {
            let body = axum::body::to_bytes(self.into_body(), usize::MAX).await?;
            Ok(String::from_utf8(body.to_vec())?)
        }
        async fn into_body_as_json<T: serde::de::DeserializeOwned>(self) -> anyhow::Result<T> {
            Ok(serde_json::from_str(&self.into_body_string().await?)?)
        }
    }

    pub(crate) async fn send_request(
        app: axum::Router,
        request: axum::http::Request<axum::body::Body>,
    ) -> anyhow::Result<axum::response::Response<axum::body::Body>> {
        Ok(tower::ServiceExt::oneshot(app, request).await?)
    }
}

今日のコミット。