class RedisConnectionError extends Error {
readonly _tag = 'RedisConnectionError';
}
class ConnectRedis extends Context.Tag('ConnectRedis')<ConnectRedis, typeof RedisStore>() {
static Live = Layer.succeed(ConnectRedis, RedisStore);
}
class RedisService extends Context.Tag('Redis')<RedisService, typeof redis>() {
static Live = Effect.gen(function* () {
const redis = yield* RedisService;
const redisClient = redis.createClient();
const RedisStore = yield* ConnectRedis;
yield* Effect.tryPromise({
try: () => redisClient.connect(),
catch: () => new RedisConnectionError(),
});
const store = new RedisStore({ client: redisClient, prefix: 'RedisSessionManagement' });
return store;
});
}
const Redis = Layer.succeed(RedisService, RedisService.Live);
export { Redis, ConnectRedis };
class RedisConnectionError extends Error {
readonly _tag = 'RedisConnectionError';
}
class ConnectRedis extends Context.Tag('ConnectRedis')<ConnectRedis, typeof RedisStore>() {
static Live = Layer.succeed(ConnectRedis, RedisStore);
}
class RedisService extends Context.Tag('Redis')<RedisService, typeof redis>() {
static Live = Effect.gen(function* () {
const redis = yield* RedisService;
const redisClient = redis.createClient();
const RedisStore = yield* ConnectRedis;
yield* Effect.tryPromise({
try: () => redisClient.connect(),
catch: () => new RedisConnectionError(),
});
const store = new RedisStore({ client: redisClient, prefix: 'RedisSessionManagement' });
return store;
});
}
const Redis = Layer.succeed(RedisService, RedisService.Live);
export { Redis, ConnectRedis };