package gw.api.web.dashboard.ui uses gw.api.util.DisplayableException uses gw.api.util.LocationUtil @Export class DataFetchResult { final var _data: T as readonly Data final var _error: Optional as readonly Error private construct(data: T, error: Optional) { _data = data _error = error } property get HasNoErrors(): boolean { return not _error.Present } reified static function of(fetcher(): U, onError(DisplayableException): U): DataFetchResult { try { return new DataFetchResult(fetcher(), Optional.empty()) } catch (exc: DisplayableException) { LocationUtil.addRequestScopedWarningMessage(exc.Message) return new DataFetchResult(onError(exc), Optional.of(exc)) } } }