diff --git a/Sources/OneWay/AnyEffect.swift b/Sources/OneWay/AnyEffect.swift index 67e10a3..6416af2 100644 --- a/Sources/OneWay/AnyEffect.swift +++ b/Sources/OneWay/AnyEffect.swift @@ -189,6 +189,17 @@ extension AnyEffect { effects ).eraseToAnyEffect() } + + @inlinable + public static func concat( + priority: TaskPriority? = nil, + @EffectsBuilder _ effects: () -> [AnyEffect] + ) -> AnyEffect { + Effects.Concat( + priority: priority, + effects() + ).eraseToAnyEffect() + } /// An effect that merges a list of effects together into a single effect, which runs the /// effects at the same time. @@ -208,4 +219,15 @@ extension AnyEffect { effects ).eraseToAnyEffect() } + + @inlinable + public static func merge( + priority: TaskPriority? = nil, + @EffectsBuilder _ effects: () -> [AnyEffect] + ) -> AnyEffect { + Effects.Merge( + priority: priority, + effects() + ).eraseToAnyEffect() + } } diff --git a/Sources/OneWay/EffectBuilder.swift b/Sources/OneWay/EffectBuilder.swift new file mode 100644 index 0000000..39de2cc --- /dev/null +++ b/Sources/OneWay/EffectBuilder.swift @@ -0,0 +1,15 @@ +// +// OneWay +// The MIT License (MIT) +// +// Copyright (c) 2022-2023 SeungYeop Yeom ( https://github.com/DevYeom ). +// + +import Foundation + +@resultBuilder +public struct EffectsBuilder { + public static func buildBlock(_ effects: AnyEffect...) -> [AnyEffect] { + return effects + } +}