const TimestampToTimestampWithoutMillis = S.transformOrFail(
S.String,
S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/)),
{
encode: (withMillis) =>
Effect.gen(function* () {
const trimmed = withMillis.split(".")[0]
if (trimmed === undefined) {
return yield* ParseResult.fail(
new ParseResult.Unexpected(
withMillis,
"Invalid date format, expected ISO 8601 with milliseconds"
)
)
}
return trimmed
}),
decode: (s) => Effect.succeed(s)
}
)
const DateTimeUtcWithoutMillis = TimestampToTimestampWithoutMillis.pipe(S.compose(S.DateTimeUtc))
const TimestampToTimestampWithoutMillis = S.transformOrFail(
S.String,
S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/)),
{
encode: (withMillis) =>
Effect.gen(function* () {
const trimmed = withMillis.split(".")[0]
if (trimmed === undefined) {
return yield* ParseResult.fail(
new ParseResult.Unexpected(
withMillis,
"Invalid date format, expected ISO 8601 with milliseconds"
)
)
}
return trimmed
}),
decode: (s) => Effect.succeed(s)
}
)
const DateTimeUtcWithoutMillis = TimestampToTimestampWithoutMillis.pipe(S.compose(S.DateTimeUtc))