Yazar, GitHub birleştirme botu bors'u üretim ortamına hazırlarken karşılaştığı zorlu bir hatayı detaylandırıyor. Botun entegrasyon tabanlı testleri sırasında, özellikle büyük bir yeniden düzenleme sonrası bazı testler beklenmedik şekilde başarısız olmaya başladı. Sorun, GitHub API'sine gönderilen bir PATCH isteğinin gövdesinin bazen boş gelmesi ve bu durumun JSON ayrıştırma hatalarına yol açmasıydı. wiremock ile taklit edilen GitHub uç noktalarında yaşanan bu tutarsızlık, karmaşık bir hata avının başlangıcı oldu.
Hata araştırması, bors'un GitHub ile iletişim kurmak için kullandığı octocrab crate'ine odaklandı. _patch metoduna Some(&serde_json::json!({...})) şeklinde bir JSON gövdesi gönderilmesine rağmen, bazı durumlarda isteğin gövdesi boş kalıyordu. Bu durumun, octocrab'ın Client nesnesinin klonlanması sırasında ortaya çıktığı anlaşıldı. Özellikle serde_json::Value türündeki bir referansın Option içinde geçirilmesi ve ardından Client'ın klonlanması, gövdenin kaybolmasına neden olabiliyordu. Bu davranış, Rust'taki Clone trait'i ve Ergonomic cloning girişimiyle ilgili tartışmalarla da bağlantılıydı.
Nihai çözüm, serde_json::Value nesnesini _patch metoduna göndermeden önce açıkça klonlamaktı. Bu, Client klonlansa bile isteğin gövdesinin her zaman doğru şekilde mevcut olmasını sağladı ve hatayı giderdi. Yazar, bu deneyimin, referanslarla çalışırken ve özellikle Clone davranışının beklenmedik etkileri olabilecek durumlarda dikkatli olmanın önemini vurguladığını belirtiyor.
Rust'ta `Clone` davranışının ve referansların karmaşıklığının, özellikle ağ isteklerinde beklenmedik hatalara yol açabileceğini gösteren önemli bir vaka çalışması.