blob: 63f7c3e7f32cdaa529c1763bc6bea8defc1c1827 [file] [log] [blame]
Jorge Canizalese8304d52015-02-17 19:50:51 -08001/*
2 *
Yang Gao5fc90292015-02-20 09:46:22 -08003 * Copyright 2015, Google Inc.
Jorge Canizalese8304d52015-02-17 19:50:51 -08004 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above
13 * copyright notice, this list of conditions and the following disclaimer
14 * in the documentation and/or other materials provided with the
15 * distribution.
16 * * Neither the name of Google Inc. nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 */
33
Jorge Canizales30697c92015-02-17 17:09:14 -080034#import "GRXWriteable.h"
35
36@implementation GRXWriteable {
37 GRXValueHandler _valueHandler;
38 GRXCompletionHandler _completionHandler;
39}
40
Jorge Canizales2779ccb2015-04-20 23:42:46 -070041+ (instancetype)writeableWithSingleValueHandler:(GRXSingleValueHandler)handler {
42 if (!handler) {
43 return [[self alloc] init];
44 }
45 return [[self alloc] initWithValueHandler:^(id value) {
46 handler(value, nil);
47 } completionHandler:^(NSError *errorOrNil) {
48 if (errorOrNil) {
49 handler(nil, errorOrNil);
50 }
51 }];
52}
53
54+ (instancetype)writeableWithStreamHandler:(GRXStreamHandler)handler {
55 if (!handler) {
56 return [[self alloc] init];
57 }
58 return [[self alloc] initWithValueHandler:^(id value) {
59 handler(NO, value, nil);
60 } completionHandler:^(NSError *errorOrNil) {
61 handler(YES, nil, errorOrNil);
62 }];
63}
64
Jorge Canizales30697c92015-02-17 17:09:14 -080065- (instancetype)init {
66 return [self initWithValueHandler:nil completionHandler:nil];
67}
68
69// Designated initializer
70- (instancetype)initWithValueHandler:(GRXValueHandler)valueHandler
71 completionHandler:(GRXCompletionHandler)completionHandler {
72 if ((self = [super init])) {
73 _valueHandler = valueHandler;
74 _completionHandler = completionHandler;
75 }
76 return self;
77}
78
Jorge Canizalesa90a9c32015-05-18 17:12:41 -070079- (void)writeValue:(id)value {
Jorge Canizales30697c92015-02-17 17:09:14 -080080 if (_valueHandler) {
81 _valueHandler(value);
82 }
83}
84
Jorge Canizalesb2c300c2015-05-18 17:19:16 -070085- (void)writesFinishedWithError:(NSError *)errorOrNil {
Jorge Canizales30697c92015-02-17 17:09:14 -080086 if (_completionHandler) {
87 _completionHandler(errorOrNil);
88 }
89}
90@end