Effect CommunityEC
Effect Community2y ago
13 replies
jessekelly

Issue with Schema annotations and context in TypeScript

Hmm. What am I missing here? It seems like Schema.annotations({ message: Effect }) isn't picking up on the context. (I'm probably just being stupid lol but this seemed to me like it should work)

import { Context, Effect, Layer, Option } from "effect";
import { Schema } from "@effect/schema";

class Message extends Context.Tag("Message")<Message, string>() {}
const msg = Layer.succeed(Message, Message.of("Hello, World!"));

const schema = Schema.String.annotations({
  message: () =>
    Effect.map(
      Effect.serviceOption(Message),
      Option.getOrElse(() => "default")
    )
});

const result = Schema.decodeUnknown(schema)(1).pipe(
  Effect.map(() => Effect.void),
  Effect.flip,
  Effect.map((err) => err.message),
  Effect.provide(msg),
  Effect.runSync
);

console.log(result); // "default"
Was this page helpful?