rx.functions.Actions Maven / Gradle / Ivy
/**
* Copyright 2014 Netflix, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package rx.functions;
import rx.exceptions.OnErrorNotImplementedException;
/**
* Utility class for the Action interfaces.
*/
public final class Actions {
@SuppressWarnings("rawtypes")
private static final EmptyAction EMPTY_ACTION = new EmptyAction();
private Actions() {
throw new IllegalStateException("No instances!");
}
@SuppressWarnings("unchecked")
public static EmptyAction empty() {
return EMPTY_ACTION;
}
static final class EmptyAction implements
Action0,
Action1,
Action2,
Action3,
Action4,
Action5,
Action6,
Action7,
Action8,
Action9,
ActionN {
@Override
public void call() {
// deliberately no op
}
@Override
public void call(T0 t1) {
// deliberately no op
}
@Override
public void call(T0 t1, T1 t2) {
// deliberately no op
}
@Override
public void call(T0 t1, T1 t2, T2 t3) {
// deliberately no op
}
@Override
public void call(T0 t1, T1 t2, T2 t3, T3 t4) {
// deliberately no op
}
@Override
public void call(T0 t1, T1 t2, T2 t3, T3 t4, T4 t5) {
// deliberately no op
}
@Override
public void call(T0 t1, T1 t2, T2 t3, T3 t4, T4 t5, T5 t6) {
// deliberately no op
}
@Override
public void call(T0 t1, T1 t2, T2 t3, T3 t4, T4 t5, T5 t6, T6 t7) {
// deliberately no op
}
@Override
public void call(T0 t1, T1 t2, T2 t3, T3 t4, T4 t5, T5 t6, T6 t7, T7 t8) {
// deliberately no op
}
@Override
public void call(T0 t1, T1 t2, T2 t3, T3 t4, T4 t5, T5 t6, T6 t7, T7 t8, T8 t9) {
// deliberately no op
}
@Override
public void call(Object... args) {
// deliberately no op
}
}
/**
* Converts an {@link Action0} to a function that calls the action and returns {@code null}.
*
* @param action
* the {@link Action0} to convert
* @return a {@link Func0} that calls {@code action} and returns {@code null}
*/
public static Func0 toFunc(final Action0 action) {
return toFunc(action, (Void) null);
}
/**
* Converts an {@link Action1} to a function that calls the action and returns {@code null}.
*
* @param the first argument type
* @param action
* the {@link Action1} to convert
* @return a {@link Func1} that calls {@code action} and returns {@code null}
*/
public static Func1 toFunc(final Action1 action) {
return toFunc(action, (Void) null);
}
/**
* Converts an {@link Action2} to a function that calls the action and returns {@code null}.
*
* @param the first argument type
* @param the second argument type
* @param action
* the {@link Action2} to convert
* @return a {@link Func2} that calls {@code action} and returns {@code null}
*/
public static Func2 toFunc(final Action2 action) {
return toFunc(action, (Void) null);
}
/**
* Converts an {@link Action3} to a function that calls the action and returns {@code null}.
*
* @param the first argument type
* @param the second argument type
* @param the third argument type
* @param action
* the {@link Action3} to convert
* @return a {@link Func3} that calls {@code action} and returns {@code null}
*/
public static Func3 toFunc(final Action3 action) {
return toFunc(action, (Void) null);
}
/**
* Converts an {@link Action4} to a function that calls the action and returns {@code null}.
*
* @param the first argument type
* @param the second argument type
* @param the third argument type
* @param the fourth argument type
* @param action
* the {@link Action4} to convert
* @return a {@link Func4} that calls {@code action} and returns {@code null}
*/
public static Func4 toFunc(final Action4 action) {
return toFunc(action, (Void) null);
}
/**
* Converts an {@link Action5} to a function that calls the action and returns {@code null}.
*
* @param the first argument type
* @param the second argument type
* @param the third argument type
* @param the fourth argument type
* @param the fifth argument type
* @param action
* the {@link Action5} to convert
* @return a {@link Func5} that calls {@code action} and returns {@code null}
*/
public static Func5 toFunc(
final Action5 action) {
return toFunc(action, (Void) null);
}
/**
* Converts an {@link Action6} to a function that calls the action and returns {@code null}.
*
* @param the first argument type
* @param the second argument type
* @param the third argument type
* @param the fourth argument type
* @param the fifth argument type
* @param the sixth argument type
* @param action
* the {@link Action6} to convert
* @return a {@link Func6} that calls {@code action} and returns {@code null}
*/
public static Func6 toFunc(
final Action6 action) {
return toFunc(action, (Void) null);
}
/**
* Converts an {@link Action7} to a function that calls the action and returns {@code null}.
*
* @param the first argument type
* @param the second argument type
* @param the third argument type
* @param the fourth argument type
* @param the fifth argument type
* @param the sixth argument type
* @param the seventh argument type
* @param action
* the {@link Action7} to convert
* @return a {@link Func7} that calls {@code action} and returns {@code null}
*/
public static Func7 toFunc(
final Action7 action) {
return toFunc(action, (Void) null);
}
/**
* Converts an {@link Action8} to a function that calls the action and returns {@code null}.
*
* @param the first argument type
* @param the second argument type
* @param the third argument type
* @param the fourth argument type
* @param the fifth argument type
* @param the sixth argument type
* @param the seventh argument type
* @param the eighth argument type
* @param action
* the {@link Action8} to convert
* @return a {@link Func8} that calls {@code action} and returns {@code null}
*/
public static Func8 toFunc(
final Action8 action) {
return toFunc(action, (Void) null);
}
/**
* Converts an {@link Action9} to a function that calls the action and returns {@code null}.
*
* @param the first argument type
* @param the second argument type
* @param the third argument type
* @param the fourth argument type
* @param the fifth argument type
* @param the sixth argument type
* @param the seventh argument type
* @param the eighth argument type
* @param the ninth argument type
* @param action
* the {@link Action9} to convert
* @return a {@link Func9} that calls {@code action} and returns {@code null}
*/
public static Func9 toFunc(
final Action9 action) {
return toFunc(action, (Void) null);
}
/**
* Converts an {@link ActionN} to a function that calls the action and returns {@code null}.
*
* @param action
* the {@link ActionN} to convert
* @return a {@link FuncN} that calls {@code action} and returns {@code null}
*/
public static FuncN toFunc(
final ActionN action) {
return toFunc(action, (Void) null);
}
/**
* Converts an {@link Action0} to a function that calls the action and returns a specified value.
*
* @param the result type
* @param action
* the {@link Action0} to convert
* @param result
* the value to return from the function call
* @return a {@link Func0} that calls {@code action} and returns {@code result}
*/
public static Func0 toFunc(final Action0 action, final R result) {
return new Func0() {
@Override
public R call() {
action.call();
return result;
}
};
}
/**
* Converts an {@link Action1} to a function that calls the action and returns a specified value.
*
* @param the first argument type
* @param the result type
* @param action
* the {@link Action1} to convert
* @param result
* the value to return from the function call
* @return a {@link Func1} that calls {@code action} and returns {@code result}
*/
public static Func1 toFunc(final Action1 action, final R result) {
return new Func1() {
@Override
public R call(T1 t1) {
action.call(t1);
return result;
}
};
}
/**
* Converts an {@link Action2} to a function that calls the action and returns a specified value.
*
* @param the first argument type
* @param the second argument type
* @param the result type
* @param action
* the {@link Action2} to convert
* @param result
* the value to return from the function call
* @return a {@link Func2} that calls {@code action} and returns {@code result}
*/
public static Func2 toFunc(final Action2 action, final R result) {
return new Func2() {
@Override
public R call(T1 t1, T2 t2) {
action.call(t1, t2);
return result;
}
};
}
/**
* Converts an {@link Action3} to a function that calls the action and returns a specified value.
*
* @param the first argument type
* @param the second argument type
* @param the third argument type
* @param the result type
* @param action
* the {@link Action3} to convert
* @param result
* the value to return from the function call
* @return a {@link Func3} that calls {@code action} and returns {@code result}
*/
public static Func3 toFunc(final Action3 action, final R result) {
return new Func3() {
@Override
public R call(T1 t1, T2 t2, T3 t3) {
action.call(t1, t2, t3);
return result;
}
};
}
/**
* Converts an {@link Action4} to a function that calls the action and returns a specified value.
*
* @param the first argument type
* @param the second argument type
* @param the third argument type
* @param the fourth argument type
* @param the result type
* @param action
* the {@link Action4} to convert
* @param result
* the value to return from the function call
* @return a {@link Func4} that calls {@code action} and returns {@code result}
*/
public static Func4 toFunc(final Action4 action, final R result) {
return new Func4() {
@Override
public R call(T1 t1, T2 t2, T3 t3, T4 t4) {
action.call(t1, t2, t3, t4);
return result;
}
};
}
/**
* Converts an {@link Action5} to a function that calls the action and returns a specified value.
*
* @param the first argument type
* @param the second argument type
* @param the third argument type
* @param the fourth argument type
* @param the fifth argument type
* @param the result type
* @param action
* the {@link Action5} to convert
* @param result
* the value to return from the function call
* @return a {@link Func5} that calls {@code action} and returns {@code result}
*/
public static Func5 toFunc(
final Action5 action, final R result) {
return new Func5() {
@Override
public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) {
action.call(t1, t2, t3, t4, t5);
return result;
}
};
}
/**
* Converts an {@link Action6} to a function that calls the action and returns a specified value.
*
* @param the first argument type
* @param the second argument type
* @param the third argument type
* @param the fourth argument type
* @param the fifth argument type
* @param the sixth argument type
* @param the result type
* @param action
* the {@link Action6} to convert
* @param result
* the value to return from the function call
* @return a {@link Func6} that calls {@code action} and returns {@code result}
*/
public static Func6 toFunc(
final Action6 action, final R result) {
return new Func6() {
@Override
public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6) {
action.call(t1, t2, t3, t4, t5, t6);
return result;
}
};
}
/**
* Converts an {@link Action7} to a function that calls the action and returns a specified value.
*
* @param the first argument type
* @param the second argument type
* @param the third argument type
* @param the fourth argument type
* @param the fifth argument type
* @param the sixth argument type
* @param the seventh argument type
* @param the result type
* @param action
* the {@link Action7} to convert
* @param result
* the value to return from the function call
* @return a {@link Func7} that calls {@code action} and returns {@code result}
*/
public static Func7 toFunc(
final Action7 action, final R result) {
return new Func7() {
@Override
public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7) {
action.call(t1, t2, t3, t4, t5, t6, t7);
return result;
}
};
}
/**
* Converts an {@link Action8} to a function that calls the action and returns a specified value.
*
* @param the first argument type
* @param the second argument type
* @param the third argument type
* @param the fourth argument type
* @param the fifth argument type
* @param the sixth argument type
* @param the seventh argument type
* @param the eighth argument type
* @param the result type
* @param action
* the {@link Action8} to convert
* @param result
* the value to return from the function call
* @return a {@link Func8} that calls {@code action} and returns {@code result}
*/
public static Func8 toFunc(
final Action8 action, final R result) {
return new Func8() {
@Override
public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8) {
action.call(t1, t2, t3, t4, t5, t6, t7, t8);
return result;
}
};
}
/**
* Converts an {@link Action9} to a function that calls the action and returns a specified value.
*
* @param the first argument type
* @param the second argument type
* @param the third argument type
* @param the fourth argument type
* @param the fifth argument type
* @param the sixth argument type
* @param the seventh argument type
* @param the eighth argument type
* @param the ninth argument type
* @param the result type
* @param action
* the {@link Action9} to convert
* @param result
* the value to return from the function call
* @return a {@link Func9} that calls {@code action} and returns {@code result}
*/
public static Func9 toFunc(
final Action9 action, final R result) {
return new Func9() {
@Override
public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9) {
action.call(t1, t2, t3, t4, t5, t6, t7, t8, t9);
return result;
}
};
}
/**
* Converts an {@link ActionN} to a function that calls the action and returns a specified value.
*
* @param the result type
* @param action
* the {@link ActionN} to convert
* @param result
* the value to return from the function call
* @return a {@link FuncN} that calls {@code action} and returns {@code result}
*/
public static FuncN toFunc(
final ActionN action, final R result) {
return new FuncN() {
@Override
public R call(Object... args) {
action.call(args);
return result;
}
};
}
/**
* Wraps an Action0 instance into an Action1 instance where the latter calls
* the former.
* @param the first argument type
* @param action the action to call
* @return the new Action1 instance
*/
public static Action1 toAction1(Action0 action) {
return new Action1CallsAction0(action);
}
static final class Action1CallsAction0 implements Action1 {
final Action0 action;
public Action1CallsAction0(Action0 action) {
this.action = action;
}
@Override
public void call(T t) {
action.call();
}
}
enum NotImplemented implements Action1 {
INSTANCE;
@Override
public void call(Throwable t) {
throw new OnErrorNotImplementedException(t);
}
}
/**
* Returns an action which throws OnErrorNotImplementedException.
* @return the the shared action
*/
public static Action1 errorNotImplemented() {
return NotImplemented.INSTANCE;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy