     }
     
 }
+
+/// :nodoc:
+extension SignalingCandidate: Encodable {
+    
+    enum CodingKeys: String, CodingKey {
+        case type
+        case candidate
+    }
+    
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.container(keyedBy: CodingKeys.self)
+        try container.encode(SignalingType.candidate.rawValue, forKey: .type)
+        try container.encode(candidate, forKey: .candidate)
+    }
+    
+}
+
+/// :nodoc:
+extension SignalingUpdate: Codable {
+    
+    enum CodingKeys: String, CodingKey {
+        case type
+        case sdp
+    }
+    
+    public init(from decoder: Decoder) throws {
+        let container = try decoder.container(keyedBy: CodingKeys.self)
+        sdp = try container.decode(String.self, forKey: .sdp)
+    }
+    
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.container(keyedBy: CodingKeys.self)
+        try container.encode(SignalingType.update.rawValue, forKey: .type)
+        try container.encode(sdp, forKey: .sdp)
+    }
+    
+}
+
+/// :nodoc:
+extension SignalingPush: Decodable {
+    
+    enum CodingKeys: String, CodingKey {
+        case data
+    }
+    
+    public init(from decoder: Decoder) throws {
+        let container = try decoder.container(keyedBy: CodingKeys.self)
+        data = try container.decode(PushData.self, forKey: .data)
+    }
+    
+}
+
+/// :nodoc:
+extension SignalingPong: Encodable {
+    
+    enum CodingKeys: String, CodingKey {
+        case type
+    }
+    
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.container(keyedBy: CodingKeys.self)
+        try container.encode(SignalingType.pong.rawValue, forKey: .type)
+    }
+    
+}

    public let sdp: String

}

// MARK: -
// MARK: Codable

    associatedtype Connect: Encodable
    associatedtype Offer: Decodable
    associatedtype Answer: Encodable
    associatedtype Candidate: Encodable
    associatedtype UpdateToServer: Encodable
    associatedtype UpdateToClient: Decodable
    associatedtype Push: Decodable
    associatedtype Notify: Decodable
    associatedtype Pong: Encodable
}

enum SignalingType: String {
