public FEELFnResult<TemporalAccessor> invoke(@ParameterName("from") TemporalAccessor date) {
if (date == null) {
return FEELFnResult.ofError(new InvalidParametersEvent(FEELEvent.Severity.ERROR, "from", "cannot be null"));
}
try {
if (!date.isSupported(ChronoField.HOUR_OF_DAY)) {
return BuiltInFunctions.getFunction( DateAndTimeFunction.class ).invoke( date, OffsetTime.of(0, 0, 0, 0, ZoneOffset.UTC) )
.cata( overrideLeft -> FEELFnResult.ofError(new InvalidParametersEvent(FEELEvent.Severity.ERROR, "from", "time-parsing exception")),
this::invoke
);
} else if( date.query( TemporalQueries.offset() ) == null ) {
return FEELFnResult.ofResult(LocalTime.from(date));
} else {
ZoneId zone = date.query(TemporalQueries.zoneId());
if (!(zone instanceof ZoneOffset)) {
return invoke(date.query(TemporalQueries.localTime()) + "@" + zone);
} else {
return FEELFnResult.ofResult(OffsetTime.from(date));
}
}
} catch (DateTimeException e) {
return FEELFnResult.ofError(new InvalidParametersEvent(FEELEvent.Severity.ERROR, "from", "time-parsing exception", e));
}
}
}