davidscheutz / Unison

Opinionated app architecture inspired by ETA & Mobius
4 stars 0 forks source link

Update & Effect Handler Code Generation #10

Open davidscheutz opened 1 year ago

davidscheutz commented 1 year ago

Generate base classes for Update and Effect Handler with a function for each case statement that throws a not implemented exception if not overridden.

davidscheutz commented 1 year ago

Input

DemoEffect: Effect {
    case performAction(parameter: String)
    case cancelAction

    enum Result {
        case success
        case error(Error)
    }
}

Output

open class DemoEffectBaseHandler: EffectHandler {
    func handle(_ effect: DemoEffect) async -> EffectResult< DemoEffect.Result> {
        switch effect {
        case .performAction(let parameter):
            return await performAction(parameter: parameter)
        case .cancelAction:
            return await cancelAction()
        }
    }

    func performAction(parameter: String) async -> EffectResult< DemoEffect.Result> {
         fatalError("Override performAction effect handler")
    }

    func cancelAction() async -> EffectResult< DemoEffect.Result> {
         fatalError("Override cancelAction effect handler")
    }
}
davidscheutz commented 1 year ago

TODO: setup SourceKitten for advanced code generation capabilities.