Effect CommunityEC
Effect Community3y ago
25 replies
Sadra

Improving Code for Parsing JSON Inputs

is there better way to do this ?
(x) => Boolean(x.titleId && x.title && x.auth)

on this code
class ParsJsonError extends Data.TaggedError("ParseJsonError")<{}> {}
class InvalidInputError extends Data.TaggedError("InvalidInputError")<{}> {}

type InputJson = {
  titleId: string;
  title: string;
  auth: string;
};

const parseInputs = (request: Request) => {
  Effect.tryPromise({
    try: () => request.json() as Promise<InputJson>,
    catch: () => new ParsJsonError(),
  }).pipe(
    Effect.filterOrFail(
      (x) => Boolean(x.titleId && x.title && x.auth),
      () => new InvalidInputError(),
    ),
    Effect.map((x) => ({
      titleId: x.titleId.trim(),
      title: x.title.trim(),
      auth: x.auth.trim(),
    })),
    Effect.filterOrFail(
      (x) => Boolean(x.titleId && x.title && x.auth),
      () => new InvalidInputError(),
    ),
  );
};
Was this page helpful?