import { ParseResult, Schema } from "@effect/schema" import { DateTime } from "effect" export const DateTimeUtcFromDate = Schema.transformOrFail( Schema.DateFromSelf, Schema.DateTimeUtcFromSelf, { strict: true, decode: (date, _, ast) => ParseResult.try({ try: () => DateTime.unsafeMake(date), catch: e => new ParseResult.Type( ast, date, e instanceof Error ? e.message : undefined, ), }), encode: dateTimeUtc => ParseResult.succeed( DateTime.toDateUtc(dateTimeUtc) ), }, ) export const DateTimeZonedFromDate = (options: { readonly timeZone: number | string | DateTime.TimeZone readonly adjustForTimeZone?: boolean | undefined }) => Schema.transformOrFail( Schema.DateFromSelf, Schema.DateTimeZonedFromSelf, { strict: true, decode: (date, _, ast) => ParseResult.try({ try: () => DateTime.unsafeMakeZoned(date, options), catch: e => new ParseResult.Type( ast, date, e instanceof Error ? e.message : undefined, ), }), encode: dateTime => ParseResult.succeed( DateTime.toDate(dateTime) ), }, )