diff --git a/Sources/NIO/Codec.swift b/Sources/NIO/Codec.swift index cbbb34cd..38895852 100644 --- a/Sources/NIO/Codec.swift +++ b/Sources/NIO/Codec.swift @@ -104,7 +104,7 @@ public extension MessageToByteEncoder { } } - public func allocateOutBuffer(ctx: ChannelHandlerContext, data: NIOAny) throws -> ByteBuffer { + public func allocateOutBuffer(ctx: ChannelHandlerContext, data: OutboundIn) throws -> ByteBuffer { return ctx.channel!.allocator.buffer(capacity: 256) } } diff --git a/Tests/NIOTests/CodecTest.swift b/Tests/NIOTests/CodecTest.swift index ad20976d..ee8a9712 100644 --- a/Tests/NIOTests/CodecTest.swift +++ b/Tests/NIOTests/CodecTest.swift @@ -78,7 +78,25 @@ public class MessageToByteEncoderTest: XCTestCase { } } + private final class Int32ToByteEncoderWithDefaultImpl : MessageToByteEncoder { + typealias OutboundIn = Int32 + typealias OutboundOut = ByteBuffer + + public func encode(ctx: ChannelHandlerContext, data value: Int32, out: inout ByteBuffer) throws { + XCTAssertEqual(MemoryLayout.size, 256) + out.write(integer: value); + } + } + + func testEncoderOverrideAllocateOutBuffer() throws { + try testEncoder(Int32ToByteEncoder()) + } + func testEncoder() throws { + try testEncoder(Int32ToByteEncoderWithDefaultImpl()) + } + + private func testEncoder(_ handler: ChannelHandler) throws { let channel = EmbeddedChannel() _ = try channel.pipeline.add(handler: Int32ToByteEncoder()).wait()