Skip to content

Commit c03d23f

Browse files
refactor: Add Option.ofOptional, Option.ofNullable
1 parent b610ef2 commit c03d23f

3 files changed

Lines changed: 23 additions & 2 deletions

File tree

src/main/java/net/marcellperger/mathexpr/util/rs/Option.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import net.marcellperger.mathexpr.util.Util;
44
import org.jetbrains.annotations.Contract;
55
import org.jetbrains.annotations.NotNull;
6+
import org.jetbrains.annotations.Nullable;
67

78
import java.util.Collections;
89
import java.util.Iterator;
10+
import java.util.Optional;
911
import java.util.function.Consumer;
1012
import java.util.function.Function;
1113
import java.util.function.Predicate;
@@ -46,6 +48,14 @@ record None<T>() implements Option<T> {
4648
return new None<>();
4749
}
4850

51+
static <T> Option<@NotNull T> ofNullable(@Nullable T value) {
52+
return ofOptional(Optional.ofNullable(value));
53+
}
54+
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
55+
static <T> Option<T> ofOptional(Optional<T> value) {
56+
return value.map(Option::newSome).orElse(newNone());
57+
}
58+
4959
default boolean isSome() {
5060
return this instanceof Some<T>;
5161
}

src/main/java/net/marcellperger/mathexpr/util/rs/Result.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,6 @@ default boolean isErrAnd(Predicate<? super E> f) {
9191
};
9292
}
9393

94-
// TODO: once Option is done, do proper ok() / err() -> Option<T / E>
95-
9694
default <U> Result<U, E> map(Function<? super T, ? extends U> op) {
9795
return switch (this) {
9896
case Ok(T value) -> new Ok<>(op.apply(value));

src/test/java/net/marcellperger/mathexpr/util/rs/OptionTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.ArrayList;
77
import java.util.Iterator;
88
import java.util.List;
9+
import java.util.Optional;
910

1011
import static org.junit.jupiter.api.Assertions.*;
1112

@@ -343,4 +344,16 @@ void test_toString() {
343344
assertEquals("Some(314)", getSome().toString());
344345
assertEquals("None", getNone().toString());
345346
}
347+
348+
@Test
349+
void ofOptional() {
350+
assertEquals(Option.newSome(314), Option.ofOptional(Optional.of(314)));
351+
assertEquals(Option.newNone(), Option.ofOptional(Optional.empty()));
352+
}
353+
354+
@Test
355+
void ofNullable() {
356+
assertEquals(Option.newSome(314), Option.ofNullable(314));
357+
assertEquals(Option.newNone(), Option.ofNullable(null));
358+
}
346359
}

0 commit comments

Comments
 (0)