Swiftgram/SSignalKit/SSignal+SideEffects.m
2015-01-31 02:39:38 +03:00

84 lines
2.0 KiB
Objective-C

#import "SSignal+SideEffects.h"
#import "SBlockDisposable.h"
@implementation SSignal (SideEffects)
- (SSignal *)onNext:(void (^)(id next))f
{
return [[SSignal alloc] initWithGenerator:^(SSubscriber *subscriber)
{
[subscriber addDisposable:[self startWithNext:^(id next)
{
f(next);
SSubscriber_putNext(subscriber, next);
} error:^(id error)
{
SSubscriber_putError(subscriber, error);
} completed:^
{
SSubscriber_putCompletion(subscriber);
}]];
}];
}
- (SSignal *)onError:(void (^)(id error))f
{
return [[SSignal alloc] initWithGenerator:^(SSubscriber *subscriber)
{
[subscriber addDisposable:[self startWithNext:^(id next)
{
SSubscriber_putNext(subscriber, next);
} error:^(id error)
{
f(error);
SSubscriber_putError(subscriber, error);
} completed:^
{
SSubscriber_putCompletion(subscriber);
}]];
}];
}
- (SSignal *)onCompletion:(void (^)())f
{
return [[SSignal alloc] initWithGenerator:^(SSubscriber *subscriber)
{
[subscriber addDisposable:[self startWithNext:^(id next)
{
SSubscriber_putNext(subscriber, next);
} error:^(id error)
{
SSubscriber_putError(subscriber, error);
} completed:^
{
f();
SSubscriber_putCompletion(subscriber);
}]];
}];
}
- (SSignal *)onDispose:(void (^)())f
{
return [[SSignal alloc] initWithGenerator:^(SSubscriber *subscriber)
{
[subscriber addDisposable:[self startWithNext:^(id next)
{
SSubscriber_putNext(subscriber, next);
} error:^(id error)
{
SSubscriber_putError(subscriber, error);
} completed:^
{
SSubscriber_putCompletion(subscriber);
}]];
[subscriber addDisposable:[[SBlockDisposable alloc] initWithBlock:^
{
f();
}]];
}];
}
@end