Change parameter order
This commit is contained in:
@@ -8,7 +8,7 @@ Any dependency that returns an `AsyncStream` can be subscribed to in the followi
|
|||||||
Reduce {
|
Reduce {
|
||||||
// your usual reducer here
|
// your usual reducer here
|
||||||
}
|
}
|
||||||
.subscribe(on: \.some.trigger.action, to: myDependency.strem, with: \.some.response.action)
|
.subscribe(to: myDependency.stream, on: \.some.trigger.action, with: \.some.response.action)
|
||||||
```
|
```
|
||||||
|
|
||||||
There is a requirement that the AsyncStream returns the same type as the response action takes.
|
There is a requirement that the AsyncStream returns the same type as the response action takes.
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ import ComposableArchitecture
|
|||||||
|
|
||||||
extension Reducer {
|
extension Reducer {
|
||||||
public func subscribe<TriggerAction, T>(
|
public func subscribe<TriggerAction, T>(
|
||||||
|
to stream: @escaping () async -> AsyncStream<T>,
|
||||||
on triggerAction: CaseKeyPath<Action, TriggerAction>,
|
on triggerAction: CaseKeyPath<Action, TriggerAction>,
|
||||||
to stream: @escaping () async throws -> AsyncStream<T>,
|
|
||||||
with responseAction: CaseKeyPath<Action, T>
|
with responseAction: CaseKeyPath<Action, T>
|
||||||
) -> _SubscribeReducer<Self, TriggerAction, T> {
|
) -> _SubscribeReducer<Self, TriggerAction, T> {
|
||||||
.init(
|
.init(
|
||||||
@@ -23,7 +23,7 @@ public struct _SubscribeReducer<Parent: Reducer, TriggerAction, T>: Reducer {
|
|||||||
let triggerAction: AnyCasePath<Parent.Action, TriggerAction>
|
let triggerAction: AnyCasePath<Parent.Action, TriggerAction>
|
||||||
|
|
||||||
@usableFromInline
|
@usableFromInline
|
||||||
let stream: () async throws -> AsyncStream<T>
|
let stream: () async -> AsyncStream<T>
|
||||||
|
|
||||||
@usableFromInline
|
@usableFromInline
|
||||||
let responseAction: AnyCasePath<Parent.Action, T>
|
let responseAction: AnyCasePath<Parent.Action, T>
|
||||||
@@ -31,7 +31,7 @@ public struct _SubscribeReducer<Parent: Reducer, TriggerAction, T>: Reducer {
|
|||||||
init(
|
init(
|
||||||
parent: Parent,
|
parent: Parent,
|
||||||
on triggerAction: CaseKeyPath<Parent.Action, TriggerAction>,
|
on triggerAction: CaseKeyPath<Parent.Action, TriggerAction>,
|
||||||
to stream: @escaping () async throws -> AsyncStream<T>,
|
to stream: @escaping () async -> AsyncStream<T>,
|
||||||
with responseAction: CaseKeyPath<Parent.Action, T>
|
with responseAction: CaseKeyPath<Parent.Action, T>
|
||||||
) {
|
) {
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
@@ -50,7 +50,7 @@ public struct _SubscribeReducer<Parent: Reducer, TriggerAction, T>: Reducer {
|
|||||||
return .merge(
|
return .merge(
|
||||||
effects,
|
effects,
|
||||||
.run { send in
|
.run { send in
|
||||||
for await value in try await stream() {
|
for await value in await stream() {
|
||||||
await send(responseAction.embed(value))
|
await send(responseAction.embed(value))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user