diff --git a/Sources/XMTPiOS/Codecs/Composite.swift b/Sources/XMTPiOS/Codecs/Composite.swift deleted file mode 100644 index fdb8e518..00000000 --- a/Sources/XMTPiOS/Codecs/Composite.swift +++ /dev/null @@ -1,99 +0,0 @@ -// -// CompositeCodec.swift -// -// -// Created by Pat Nakajima on 12/22/22. -// - -typealias Composite = Xmtp_MessageContents_Composite - -let ContentTypeComposite = ContentTypeID(authorityID: "xmtp.org", typeID: "composite", versionMajor: 1, versionMinor: 0) - -extension Composite.Part { - init(encodedContent: EncodedContent) { - self.init() - element = .part(encodedContent) - } - - init(composite: Composite) { - self.init() - element = .composite(composite) - } -} - -struct CompositeCodec: ContentCodec { - public typealias T = DecodedComposite - - public var contentType: ContentTypeID { - ContentTypeComposite - } - - public func encode(content: DecodedComposite, client _: Client) throws -> EncodedContent { - let composite = toComposite(content: content) - var encoded = EncodedContent() - encoded.type = ContentTypeComposite - encoded.content = try composite.serializedData() - return encoded - } - - public func decode(content encoded: EncodedContent, client _: Client) throws -> DecodedComposite { - let composite = try Composite(serializedData: encoded.content) - let decodedComposite = fromComposite(composite: composite) - return decodedComposite - } - - public func fallback(content: DecodedComposite) throws -> String? { - return nil - } - - public func shouldPush(content: DecodedComposite) throws -> Bool { - return false - } - - func toComposite(content decodedComposite: DecodedComposite) -> Composite { - var composite = Composite() - - if let content = decodedComposite.encodedContent { - composite.parts = [Composite.Part(encodedContent: content)] - return composite - } - - for part in decodedComposite.parts { - if let encodedContent = part.encodedContent { - composite.parts.append(Composite.Part(encodedContent: encodedContent)) - } else { - composite.parts.append(Composite.Part(composite: toComposite(content: part))) - } - } - - return composite - } - - func fromComposite(composite: Composite) -> DecodedComposite { - var decodedComposite = DecodedComposite() - - if composite.parts.count == 1, case let .part(content) = composite.parts.first?.element { - decodedComposite.encodedContent = content - return decodedComposite - } - - decodedComposite.parts = composite.parts.map { fromCompositePart(part: $0) } - - return decodedComposite - } - - func fromCompositePart(part: Composite.Part) -> DecodedComposite { - var decodedComposite = DecodedComposite() - - switch part.element { - case let .part(encodedContent): - decodedComposite.encodedContent = encodedContent - case let .composite(composite): - decodedComposite.parts = composite.parts.map { fromCompositePart(part: $0) } - case .none: - return decodedComposite - } - - return decodedComposite - } -} diff --git a/Sources/XMTPiOS/Codecs/DecodedComposite.swift b/Sources/XMTPiOS/Codecs/DecodedComposite.swift deleted file mode 100644 index 0719ddea..00000000 --- a/Sources/XMTPiOS/Codecs/DecodedComposite.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// DecodedComposite.swift -// -// -// Created by Pat Nakajima on 12/22/22. -// - -import Foundation - -public struct DecodedComposite { - var parts: [DecodedComposite] = [] - var encodedContent: EncodedContent? - - init(parts: [DecodedComposite] = [], encodedContent: EncodedContent? = nil) { - self.parts = parts - self.encodedContent = encodedContent - } - - func content(with client: Client) throws -> T? { - return try encodedContent?.decoded(with: client) - } -} diff --git a/Tests/XMTPTests/CodecTests.swift b/Tests/XMTPTests/CodecTests.swift index 08ce1300..d3f7fd3b 100644 --- a/Tests/XMTPTests/CodecTests.swift +++ b/Tests/XMTPTests/CodecTests.swift @@ -104,50 +104,4 @@ class CodecTests: XCTestCase { XCTAssert(!message.senderHmac.isEmpty) } - - - func testCompositeCodecOnePart() async throws { - let fixtures = await fixtures() - - let aliceClient = fixtures.aliceClient! - aliceClient.register(codec: CompositeCodec()) - let aliceConversation = try await aliceClient.conversations.newConversation(with: fixtures.bob.address) - - let textContent = try TextCodec().encode(content: "hiya", client: aliceClient) - let source = DecodedComposite(encodedContent: textContent) - try await aliceConversation.send(content: source, options: .init(contentType: CompositeCodec().contentType)) - let messages = try await aliceConversation.messages() - - let decoded: DecodedComposite = try messages[0].content() - XCTAssertEqual("hiya", try decoded.content(with: aliceClient)) - } - - func testCompositeCodecCanHaveParts() async throws { - let fixtures = await fixtures() - - let aliceClient = fixtures.aliceClient! - let aliceConversation = try await aliceClient.conversations.newConversation(with: fixtures.bob.address) - - aliceClient.register(codec: CompositeCodec()) - aliceClient.register(codec: NumberCodec()) - - let textContent = try TextCodec().encode(content: "sup", client: aliceClient) - let numberContent = try NumberCodec().encode(content: 3.14, client: aliceClient) - - let source = DecodedComposite(parts: [ - DecodedComposite(encodedContent: textContent), - DecodedComposite(parts: [ - DecodedComposite(encodedContent: numberContent), - ]), - ]) - - try await aliceConversation.send(content: source, options: .init(contentType: CompositeCodec().contentType)) - let messages = try await aliceConversation.messages() - - let decoded: DecodedComposite = try messages[0].content() - let part1 = decoded.parts[0] - let part2 = decoded.parts[1].parts[0] - XCTAssertEqual("sup", try part1.content(with: aliceClient)) - XCTAssertEqual(3.14, try part2.content(with: aliceClient)) - } }