CombineCommunity / CombineExt

CombineExt provides a collection of operators, publishers and utilities for Combine, that are not provided by Apple themselves, but are common in other Reactive Frameworks and standards.
https://combine.community
MIT License
1.73k stars 155 forks source link

.just, .empty and .fail on AnyPublisher #155

Open stefanomondino opened 1 year ago

stefanomondino commented 1 year ago

I was wondering if there was a reason to not include in this (awesome) library some utility methods to simplify usage of Just, Fail and Empty, which requires an eraseToAnyPublisher() in so many scenarios.

I was thinking about something like this

public extension AnyPublisher {
    static func just(_ value: Output) -> AnyPublisher<Output, Failure> {
        Just(value)
            .setFailureType(to: Failure.self)
            .eraseToAnyPublisher()
    }
    static func empty() -> AnyPublisher<Output, Failure> {
        Empty()
            .setFailureType(to: Failure.self)
            .eraseToAnyPublisher()
    }

    static func fail(_ error: Failure) -> AnyPublisher<Output, Failure> {
        Fail(error: error).eraseToAnyPublisher()
    }
}

this could allow something like

func somePublisherValue() -> AnyPublisher<String, Never> {
.just("hey")
// instead of Just("hey").eraseToAnyPublisher()
}

This should also be super-useful in complex flatMaps with AnyPublishers as return values and some guard/let that always returns a Just/Fail

Is it something that could be useful or it's pointless? Am I missing something? Is it already there and I can't see it? :D

Cheers and thanks (as usual) for the awesome work.

Oni-zerone commented 1 year ago

This could be really useful!