From 1cde158d9417a1b877aeb9458e2e16e278e43811 Mon Sep 17 00:00:00 2001 From: Serge Kazakov Date: Thu, 5 Sep 2024 12:46:28 +0100 Subject: [PATCH] =?UTF-8?q?=D0=A1lean=20up=20(#84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/Puredux/Store/AnyStore.swift | 154 ++++++++++----------------- 1 file changed, 57 insertions(+), 97 deletions(-) diff --git a/Sources/Puredux/Store/AnyStore.swift b/Sources/Puredux/Store/AnyStore.swift index 8040443..0303af5 100644 --- a/Sources/Puredux/Store/AnyStore.swift +++ b/Sources/Puredux/Store/AnyStore.swift @@ -17,12 +17,11 @@ public struct AnyStore: Store { let dispatchHandler: Dispatch let subscriptionHandler: Subscribe let referencedStore: ReferencedStore - - public func eraseToAnyStore() -> AnyStore { self } - } public extension AnyStore { + func eraseToAnyStore() -> AnyStore { self } + func dispatch(_ action: Action) { dispatchHandler(action) executeAsyncAction(action) @@ -33,41 +32,6 @@ public extension AnyStore { } } -extension AnyStore { - init(dispatcher: @escaping Dispatch, - subscribe: @escaping Subscribe , - referenced storeObject: ReferencedStore) { - - dispatchHandler = { dispatcher($0) } - subscriptionHandler = { subscribe($0) } - referencedStore = storeObject - } - - func referencedStoreObject() -> AnyStoreObject? { - referencedStore.object() - } - - func weak() -> AnyStore { - AnyStore( - dispatcher: dispatchHandler, - subscribe: subscriptionHandler, - referenced: referencedStore.weak() - ) - } -} - -//MARK: - AsyncActionsExecutor - -extension AnyStore { - func executeAsyncAction(_ action: Action) { - guard let action = action as? (any AsyncAction) else { - return - } - - action.execute(self.dispatchHandler) - } -} - // MARK: - Basic Transformations public extension AnyStore { @@ -282,63 +246,59 @@ public extension AnyStore { // MARK: - Actions Transformations -// -// extension Store { -// func map(action transform: @escaping (A) -> Action) -> AnyStore { -// let store = instance -// let weakStore = weakStore() -// return AnyStore( -// dispatcher: { action in weakStore.dispatch(transform(action)) }, -// subscribe: weakStore.subscribeHandler, -// storeObject: store.getStoreObject -// ) -// } -// } -// -// extension StateStore { -// func map(action transform: @escaping (A) -> Action) -> AnyStore { -// instance.map(action: transform) -// } -// } +/* + extension Store { + func map(action transform: @escaping (A) -> Action) -> AnyStore { + let store = instance + let weakStore = weakStore() + return AnyStore( + dispatcher: { action in weakStore.dispatch(transform(action)) }, + subscribe: weakStore.subscribeHandler, + storeObject: store.getStoreObject + ) + } + } -// -//enum ReferencedStore { -// case strong(AnyStoreObject) -// case weak(() -> AnyStoreObject?) -// -// init(weak storeObject: AnyStoreObject) { -// self = .weak { [weak storeObject] in storeObject } -// } -// -// init(strong storeObject: AnyStoreObject) { -// self = .strong(storeObject) -// } -// -// func map(_ transform: @escaping (S) -> T) -> ReferencedStore { -// switch self { -// case .strong(let storeObject): -// return .strong(storeObject.map(transform)) -// case .weak(let storeObjectClosure): -// let storeObject = storeObjectClosure()?.map(transform) -// return .weak { [weak storeObject] in storeObject } -// } -// } -// -// func weakReferencedStore() -> ReferencedStore { -// switch self { -// case .strong(let storeObject): -// return .weak { [weak storeObject] in storeObject } -// case .weak: -// return self -// } -// } -// -// func storeObject() -> AnyStoreObject? { -// switch self { -// case .strong(let storeObject): -// return storeObject -// case .weak(let storeObjectClosure): -// return storeObjectClosure() -// } -// } -//} + extension StateStore { + func map(action transform: @escaping (A) -> Action) -> AnyStore { + instance.map(action: transform) + } + } +*/ + +//MARK: - Internal + +extension AnyStore { + init(dispatcher: @escaping Dispatch, + subscribe: @escaping Subscribe , + referenced storeObject: ReferencedStore) { + + dispatchHandler = { dispatcher($0) } + subscriptionHandler = { subscribe($0) } + referencedStore = storeObject + } + + func referencedStoreObject() -> AnyStoreObject? { + referencedStore.object() + } + + func weak() -> AnyStore { + AnyStore( + dispatcher: dispatchHandler, + subscribe: subscriptionHandler, + referenced: referencedStore.weak() + ) + } +} + +//MARK: - AsyncActionsExecutor + +extension AnyStore { + func executeAsyncAction(_ action: Action) { + guard let action = action as? (any AsyncAction) else { + return + } + + action.execute(self.dispatchHandler) + } +}