export const TimeFromString = Schema.transformOrFail(
Schema.String,
TimeSchema,
{
strict: true,
decode: (str, options, ast) => {
const [hours, minutes, seconds] = str.split(":").map(Number);
if (
hours === undefined ||
minutes === undefined ||
seconds === undefined ||
isNaN(hours) ||
isNaN(minutes) ||
isNaN(seconds)
) {
return ParseResult.fail(
new ParseResult.Type(ast, str, "Invalid time format"),
);
}
return ParseResult.succeed({ hours, minutes, seconds });
},
encode: ({ hours, minutes, seconds }) =>
Effect.succeed(`${hours}:${minutes}:${seconds}`),
},
);
export const TimeFromString = Schema.transformOrFail(
Schema.String,
TimeSchema,
{
strict: true,
decode: (str, options, ast) => {
const [hours, minutes, seconds] = str.split(":").map(Number);
if (
hours === undefined ||
minutes === undefined ||
seconds === undefined ||
isNaN(hours) ||
isNaN(minutes) ||
isNaN(seconds)
) {
return ParseResult.fail(
new ParseResult.Type(ast, str, "Invalid time format"),
);
}
return ParseResult.succeed({ hours, minutes, seconds });
},
encode: ({ hours, minutes, seconds }) =>
Effect.succeed(`${hours}:${minutes}:${seconds}`),
},
);