Mapping Schema to Tagged Data
Hello all, how can I map schema to arbitrary structure, for example Tagged Data
Or maybe there is a better way to achieve this?
import { Data } from 'effect';
import { Schema as S } from '@effect/schema';
export const ApiErrror = Data.taggedEnum<ApiErrror>();
export type ApiErrror = Data.TaggedEnum<{
BadRequest: { code: 400; message: string };
LoginFailed: { code: 401; mesasge: string };
}>;
const badRequestSchema = S.struct({
statusCode: S.literal(400),
message: S.string,
})
// map
// ({statusCode, message}) => ApiError.BadRequest({code : statusCode, message})
const loginFailedSchema = S.struct({
statusCode: S.literal(401),
message: S.string,
})
// map
// ({statusCode, message}) => ApiError.LoginFailed({code : statusCode, message})
const apiResponseSchema = S.union(badRequestSchema, loginFailedSchema);
// (_: unknown) => ApiError
const parse = S.parseEither(apiResponseSchema);import { Data } from 'effect';
import { Schema as S } from '@effect/schema';
export const ApiErrror = Data.taggedEnum<ApiErrror>();
export type ApiErrror = Data.TaggedEnum<{
BadRequest: { code: 400; message: string };
LoginFailed: { code: 401; mesasge: string };
}>;
const badRequestSchema = S.struct({
statusCode: S.literal(400),
message: S.string,
})
// map
// ({statusCode, message}) => ApiError.BadRequest({code : statusCode, message})
const loginFailedSchema = S.struct({
statusCode: S.literal(401),
message: S.string,
})
// map
// ({statusCode, message}) => ApiError.LoginFailed({code : statusCode, message})
const apiResponseSchema = S.union(badRequestSchema, loginFailedSchema);
// (_: unknown) => ApiError
const parse = S.parseEither(apiResponseSchema);Or maybe there is a better way to achieve this?
