@@ -198,7 +198,7 @@ public actor AsyncLimitBuffer<Element: Sendable>: AsyncBuffer {
198198 }
199199}
200200
201- extension AsyncSequence where Element: Sendable {
201+ extension AsyncSequence where Element: Sendable , Self : Sendable {
202202 /// Creates an asynchronous sequence that buffers elements using a buffer created from a supplied closure.
203203 ///
204204 /// Use the `buffer(_:)` method to account for `AsyncSequence` types that may produce elements faster
@@ -224,7 +224,7 @@ extension AsyncSequence where Element: Sendable {
224224}
225225
226226/// An `AsyncSequence` that buffers elements utilizing an `AsyncBuffer`.
227- public struct AsyncBufferSequence < Base: AsyncSequence , Buffer: AsyncBuffer > where Base. Element == Buffer . Input , Base . AsyncIterator : Sendable {
227+ public struct AsyncBufferSequence < Base: AsyncSequence & Sendable , Buffer: AsyncBuffer > where Base. Element == Buffer . Input {
228228 let base : Base
229229 let createBuffer : @Sendable ( ) -> Buffer
230230
@@ -246,11 +246,11 @@ extension AsyncBufferSequence: AsyncSequence {
246246 let buffer : Buffer
247247 let state : AsyncBufferState < Buffer . Input , Buffer . Output >
248248
249- init ( _ iterator : Base . AsyncIterator , buffer: Buffer , state: AsyncBufferState < Buffer . Input , Buffer . Output > ) {
249+ init ( _ base : Base , buffer: Buffer , state: AsyncBufferState < Buffer . Input , Buffer . Output > ) {
250250 self . buffer = buffer
251251 self . state = state
252252 task = Task {
253- var iter = iterator
253+ var iter = base . makeAsyncIterator ( )
254254 do {
255255 while let item = try await iter. next ( ) {
256256 await state. enqueue ( item, buffer: buffer)
@@ -279,21 +279,21 @@ extension AsyncBufferSequence: AsyncSequence {
279279 }
280280
281281 enum State {
282- case idle( Base . AsyncIterator , @Sendable ( ) -> Buffer )
282+ case idle( Base , @Sendable ( ) -> Buffer )
283283 case active( Active )
284284 }
285285
286286 var state : State
287287
288- init ( _ iterator : Base . AsyncIterator , createBuffer: @Sendable @escaping ( ) -> Buffer ) {
289- state = . idle( iterator , createBuffer)
288+ init ( _ base : Base , createBuffer: @Sendable @escaping ( ) -> Buffer ) {
289+ state = . idle( base , createBuffer)
290290 }
291291
292292 public mutating func next( ) async rethrows -> Element ? {
293293 switch state {
294- case . idle( let iterator , let createBuffer) :
294+ case . idle( let base , let createBuffer) :
295295 let bufferState = AsyncBufferState < Base . Element , Buffer . Output > ( )
296- let buffer = Active ( iterator , buffer: createBuffer ( ) , state: bufferState)
296+ let buffer = Active ( base , buffer: createBuffer ( ) , state: bufferState)
297297 state = . active( buffer)
298298 return try await buffer. next ( )
299299 case . active( let buffer) :
@@ -303,6 +303,6 @@ extension AsyncBufferSequence: AsyncSequence {
303303 }
304304
305305 public func makeAsyncIterator( ) -> Iterator {
306- Iterator ( base. makeAsyncIterator ( ) , createBuffer: createBuffer)
306+ Iterator ( base, createBuffer: createBuffer)
307307 }
308308}
0 commit comments