package com.novoda.bonfire.rx; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import rx.Observable; import rx.Subscriber; class SetValueOnSubscribe<T, U> implements Observable.OnSubscribe<U> { private final T value; private final DatabaseReference databaseReference; private final U returnValue; SetValueOnSubscribe(T value, DatabaseReference databaseReference, U returnValue) { this.value = value; this.databaseReference = databaseReference; this.returnValue = returnValue; } @Override public void call(Subscriber<? super U> subscriber) { databaseReference.setValue(value, new RxCompletionListener<>(subscriber, returnValue)); } private static class RxCompletionListener<T> implements DatabaseReference.CompletionListener { private final Subscriber<? super T> subscriber; private final T successValue; RxCompletionListener(Subscriber<? super T> subscriber, T successValue) { this.subscriber = subscriber; this.successValue = successValue; } @Override public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) { if (databaseError == null) { subscriber.onNext(successValue); subscriber.onCompleted(); } else { subscriber.onError(databaseError.toException()); } } } }