From ac3b80e17ffd96768c3bff4c0c32b051f2a4c466 Mon Sep 17 00:00:00 2001 From: zztkm Date: Tue, 16 Jul 2024 21:47:23 +0900 Subject: [PATCH] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92?= =?UTF-8?q?=E8=A3=9C=E5=AE=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Signaling.swift | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Sora/Signaling.swift b/Sora/Signaling.swift index 85be0bf8..52be83bf 100644 --- a/Sora/Signaling.swift +++ b/Sora/Signaling.swift @@ -807,13 +807,16 @@ extension SignalingConnect: Codable { try container.encodeIfPresent(clientId, forKey: .client_id) try container.encodeIfPresent(bundleId, forKey: .bundle_id) try container.encodeIfPresent(sdp, forKey: .sdp) - // metadata と notifyMetadata は nil でない場合のみエンコードする - // この if 分岐をせずに superEncoder を呼び出すと、`"metadata": {}` が含まれてしまう + + // try metadata?.encode(to: metadataEnc) で metadata が nil の時はエンコードが実行されないように実装しても、 + // container.superEncoder(forKey: .metadata) の呼び出し時点で子要素の準備までしてしまっているので + // metadata が nil の場合でも、`"metadata": {}` になってしまう。 + // これを回避するために metadata が nil でない場合のみ、container.superEncoder(forKey: .metadata) を呼び出して + // encode(to:) を実行するような実装にしている。 if let metadata { let metadataEnc = container.superEncoder(forKey: .metadata) try metadata.encode(to: metadataEnc) } - // この if 分岐をせずに superEncoder を呼び出すと、`"signaling_notify_metadata": {}` が含まれてしまう if let notifyMetadata { let notifyEnc = container.superEncoder(forKey: .signaling_notify_metadata) try notifyMetadata.encode(to: notifyEnc)