Skip to content

Commit 7db3515

Browse files
hide Result implementations and remove their toString overrides
1 parent c1e2359 commit 7db3515

File tree

3 files changed

+149
-150
lines changed

3 files changed

+149
-150
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package org.quiltmc.enigma.util;
2+
3+
import java.util.Objects;
4+
import java.util.Optional;
5+
import java.util.function.Function;
6+
7+
record ErrResult<T, E>(E error) implements Result<T, E> {
8+
public ErrResult {
9+
Objects.requireNonNull(error);
10+
}
11+
12+
@Override
13+
public boolean isOk() {
14+
return false;
15+
}
16+
17+
@Override
18+
public boolean isErr() {
19+
return true;
20+
}
21+
22+
@Override
23+
public Optional<T> ok() {
24+
return Optional.empty();
25+
}
26+
27+
@Override
28+
public Optional<E> err() {
29+
return Optional.of(this.error);
30+
}
31+
32+
@Override
33+
public T unwrap() {
34+
throw new IllegalStateException(String.format("Called Result.unwrap on an Err value: %s", this.error));
35+
}
36+
37+
@Override
38+
public E unwrapErr() {
39+
return this.error;
40+
}
41+
42+
@Override
43+
public T unwrapOr(T fallback) {
44+
return fallback;
45+
}
46+
47+
@Override
48+
public T unwrapOrElse(Function<E, T> fallback) {
49+
return fallback.apply(this.error);
50+
}
51+
52+
@Override
53+
@SuppressWarnings("unchecked")
54+
public <U> Result<U, E> map(Function<T, U> mapper) {
55+
return (Result<U, E>) this;
56+
}
57+
58+
@Override
59+
public <F> Result<T, F> mapErr(Function<E, F> mapper) {
60+
return Result.err(mapper.apply(this.error));
61+
}
62+
63+
@Override
64+
@SuppressWarnings("unchecked")
65+
public <U> Result<U, E> and(Result<U, E> next) {
66+
return (Result<U, E>) this;
67+
}
68+
69+
@Override
70+
@SuppressWarnings("unchecked")
71+
public <U> Result<U, E> andThen(Function<T, Result<U, E>> next) {
72+
return (Result<U, E>) this;
73+
}
74+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package org.quiltmc.enigma.util;
2+
3+
import java.util.Objects;
4+
import java.util.Optional;
5+
import java.util.function.Function;
6+
7+
record OkResult<T, E>(T value) implements Result<T, E> {
8+
public OkResult {
9+
Objects.requireNonNull(value);
10+
}
11+
12+
@Override
13+
public boolean isOk() {
14+
return true;
15+
}
16+
17+
@Override
18+
public boolean isErr() {
19+
return false;
20+
}
21+
22+
@Override
23+
public Optional<T> ok() {
24+
return Optional.of(this.value);
25+
}
26+
27+
@Override
28+
public Optional<E> err() {
29+
return Optional.empty();
30+
}
31+
32+
@Override
33+
public T unwrap() {
34+
return this.value;
35+
}
36+
37+
@Override
38+
public E unwrapErr() {
39+
throw new IllegalStateException(String.format("Called Result.unwrapErr on an Ok value: %s", this.value));
40+
}
41+
42+
@Override
43+
public T unwrapOr(T fallback) {
44+
return this.value;
45+
}
46+
47+
@Override
48+
public T unwrapOrElse(Function<E, T> fallback) {
49+
return this.value;
50+
}
51+
52+
@Override
53+
public <U> Result<U, E> map(Function<T, U> mapper) {
54+
return Result.ok(mapper.apply(this.value));
55+
}
56+
57+
@Override
58+
@SuppressWarnings("unchecked")
59+
public <F> Result<T, F> mapErr(Function<E, F> mapper) {
60+
return (Result<T, F>) this;
61+
}
62+
63+
@Override
64+
public <U> Result<U, E> and(Result<U, E> next) {
65+
return next;
66+
}
67+
68+
@Override
69+
public <U> Result<U, E> andThen(Function<T, Result<U, E>> next) {
70+
return next.apply(this.value);
71+
}
72+
}
Lines changed: 3 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.quiltmc.enigma.util;
22

3-
import java.util.Objects;
43
import java.util.Optional;
54
import java.util.function.Function;
65

@@ -13,7 +12,7 @@
1312
* @param <T> the value type held by a successful result
1413
* @param <E> the error type held by an unsuccessful result
1514
*/
16-
public sealed interface Result<T, E> {
15+
public sealed interface Result<T, E> permits OkResult, ErrResult {
1716
/**
1817
* Creates a successful result holding the passed {@code value}.
1918
*
@@ -27,7 +26,7 @@ public sealed interface Result<T, E> {
2726
* @throws NullPointerException if the passed {@code value} is {@code null}
2827
*/
2928
static <T, E> Result<T, E> ok(T value) {
30-
return new Ok<>(value);
29+
return new OkResult<>(value);
3130
}
3231

3332
/**
@@ -43,7 +42,7 @@ static <T, E> Result<T, E> ok(T value) {
4342
* @throws NullPointerException if the passed {@code error} is {@code null}
4443
*/
4544
static <T, E> Result<T, E> err(E error) {
46-
return new Err<>(error);
45+
return new ErrResult<>(error);
4746
}
4847

4948
/**
@@ -136,150 +135,4 @@ static <T, E> Result<T, E> err(E error) {
136135
* @param <U> the value type held by a returned successful result
137136
*/
138137
<U> Result<U, E> andThen(Function<T, Result<U, E>> next);
139-
140-
record Ok<T, E>(T value) implements Result<T, E> {
141-
public Ok {
142-
Objects.requireNonNull(value);
143-
}
144-
145-
@Override
146-
public boolean isOk() {
147-
return true;
148-
}
149-
150-
@Override
151-
public boolean isErr() {
152-
return false;
153-
}
154-
155-
@Override
156-
public Optional<T> ok() {
157-
return Optional.of(this.value);
158-
}
159-
160-
@Override
161-
public Optional<E> err() {
162-
return Optional.empty();
163-
}
164-
165-
@Override
166-
public T unwrap() {
167-
return this.value;
168-
}
169-
170-
@Override
171-
public E unwrapErr() {
172-
throw new IllegalStateException(String.format("Called Result.unwrapErr on an Ok value: %s", this.value));
173-
}
174-
175-
@Override
176-
public T unwrapOr(T fallback) {
177-
return this.value;
178-
}
179-
180-
@Override
181-
public T unwrapOrElse(Function<E, T> fallback) {
182-
return this.value;
183-
}
184-
185-
@Override
186-
public <U> Result<U, E> map(Function<T, U> mapper) {
187-
return Result.ok(mapper.apply(this.value));
188-
}
189-
190-
@Override
191-
@SuppressWarnings("unchecked")
192-
public <F> Result<T, F> mapErr(Function<E, F> mapper) {
193-
return (Result<T, F>) this;
194-
}
195-
196-
@Override
197-
public <U> Result<U, E> and(Result<U, E> next) {
198-
return next;
199-
}
200-
201-
@Override
202-
public <U> Result<U, E> andThen(Function<T, Result<U, E>> next) {
203-
return next.apply(this.value);
204-
}
205-
206-
@Override
207-
public String toString() {
208-
return String.format("Result.Ok(%s)", this.value);
209-
}
210-
}
211-
212-
record Err<T, E>(E error) implements Result<T, E> {
213-
public Err {
214-
Objects.requireNonNull(error);
215-
}
216-
217-
@Override
218-
public boolean isOk() {
219-
return false;
220-
}
221-
222-
@Override
223-
public boolean isErr() {
224-
return true;
225-
}
226-
227-
@Override
228-
public Optional<T> ok() {
229-
return Optional.empty();
230-
}
231-
232-
@Override
233-
public Optional<E> err() {
234-
return Optional.of(this.error);
235-
}
236-
237-
@Override
238-
public T unwrap() {
239-
throw new IllegalStateException(String.format("Called Result.unwrap on an Err value: %s", this.error));
240-
}
241-
242-
@Override
243-
public E unwrapErr() {
244-
return this.error;
245-
}
246-
247-
@Override
248-
public T unwrapOr(T fallback) {
249-
return fallback;
250-
}
251-
252-
@Override
253-
public T unwrapOrElse(Function<E, T> fallback) {
254-
return fallback.apply(this.error);
255-
}
256-
257-
@Override
258-
@SuppressWarnings("unchecked")
259-
public <U> Result<U, E> map(Function<T, U> mapper) {
260-
return (Result<U, E>) this;
261-
}
262-
263-
@Override
264-
public <F> Result<T, F> mapErr(Function<E, F> mapper) {
265-
return Result.err(mapper.apply(this.error));
266-
}
267-
268-
@Override
269-
@SuppressWarnings("unchecked")
270-
public <U> Result<U, E> and(Result<U, E> next) {
271-
return (Result<U, E>) this;
272-
}
273-
274-
@Override
275-
@SuppressWarnings("unchecked")
276-
public <U> Result<U, E> andThen(Function<T, Result<U, E>> next) {
277-
return (Result<U, E>) this;
278-
}
279-
280-
@Override
281-
public String toString() {
282-
return String.format("Result.Err(%s)", this.error);
283-
}
284-
}
285138
}

0 commit comments

Comments
 (0)