blob: b905cc41c595481d56f413e2b3a42d26b0989476 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import { Effect, Result } from "effect";
export const parseJsonStringEffect = (value: string) =>
Effect.try({
try: () => JSON.parse(value) as unknown,
catch: (cause) => new Error("Invalid JSON payload", { cause }),
});
export const parseJsonStringEither = (value: string) =>
Result.try({
try: () => Effect.runSync(parseJsonStringEffect(value)),
catch: (cause) =>
cause instanceof Error
? cause
: new Error("Failed to parse JSON payload", { cause }),
});
export const parseJsonStringOrThrow = <T = unknown>(value: string): T =>
Result.getOrThrow(parseJsonStringEither(value)) as T;
export const parseJsonStringOrDefault = <T>(value: string, fallback: T): T => {
const parsed = parseJsonStringEither(value);
return Result.match(parsed, {
onSuccess: (decoded) => decoded as T,
onFailure: () => fallback,
});
};
|