J6S23MDGHVSCVVIRB6XRNSY3EGTDNWFJHV7RYLIEHBUK5KU63CFQC ZIG57EE6RB22JGB3CT33EN2HVYCHCXBT5GROBTBMBLEMDTGQOOBQC WRPIYG3EUHZR6N6T74ZXZDXATRMIRLXAQ24UNUNSVTVYGMT2VDSQC QU5FW67RGCWOWT2YFM4NYMJFFHWIRPQANQBBAHBKZUY7UYMCSIMQC JXG3FCXYBDKMUD77DOM7RCIJYKB7BILC43OHHDZBE7YQRGAMUCCAC NJNMO72S7VIUV22JXB4IFPZMHWTJAOTP6EC6Z4QSKYIROSXT52MQC BFZN4SUAGYNFFYVAP36BAX32DMO622PK4EPEVQQEAGC2IHTEAAPQC EFSXYZPOGA5M4DN65IEIDO7JK6U34DMQELAPHOIL2UAT6HRC66BAC B6HWAPDPXIWH7CHK5VLMWLL6EQN6NOFZEFYO47BPUY2ZO4SL7VDAC IZEVQF627FA7VV25KJAWYWGGC35LZUUBBQRPN5ZAINTQLPEDRTEAC RN7EI6INGUUHGMNY5RU3NH56WPLRZY5ZMYDNFMNE3TGV4ESFLQIAC data Event i= StartEvent i| StopEvent iderive instance eventFunctor :: Functor Eventinstance eventFoldable :: Foldable Event wherefoldr f b = case _ ofStartEvent a -> f a bStopEvent a -> f a bfoldl f b = case _ ofStartEvent a -> f b aStopEvent a -> f b afoldMap = foldMapDefaultRinstance eventTraversable :: Traversable Event wheretraverse f = case _ ofStartEvent a -> StartEvent <$> f aStopEvent a -> StopEvent <$> f asequence = traverse identityinstance decodeJsonEvent :: DecodeJson (Event String) wheredecodeJson json = doobj <- decodeJson jsonevent <- obj .: "event"start' <- traverse (_ .: "eventTime") =<< event .:? "start"stop' <- traverse (_ .: "eventTime") =<< event .:? "stop"note "Only 'stop' and 'start' events are supported." $ (StartEvent <$> start') <|> (StopEvent <$> stop')
StatusCode 403 -> pure <<< Left <<< LogFailure $ ForbiddenStatusCode 200 -> Right <$> liftEffect nowother -> pure <<< Left <<< LogFailure $ Error { status: Just other, message: r.statusText }
StatusCode 403 ->throwError $ LogFailure ForbiddenStatusCode 200 ->withExceptT (LogFailure <<< ParseFailure r.body) $ doevent <- except $ decodeJson r.bodytimeEvent <- traverse parseDate eventcase timeEvent ofStartEvent t -> pure $ fromDateTime tStopEvent _ -> throwError $ "Expected start event, got stop."other ->throwError <<< LogFailure $ Error { status: Just other, message: r.statusText }
StatusCode 403 -> pure <<< Left <<< LogFailure $ ForbiddenStatusCode 200 -> Right <$> liftEffect nowother -> pure <<< Left <<< LogFailure $ Error { status: Just other, message: r.statusText }
StatusCode 403 ->throwError $ LogFailure ForbiddenStatusCode 200 ->withExceptT (LogFailure <<< ParseFailure r.body) $ doevent <- except $ decodeJson r.bodytimeEvent <- traverse parseDate eventcase timeEvent ofStartEvent _ -> throwError $ "Expected stop event, got start."StopEvent t -> pure $ fromDateTime tother ->throwError <<< LogFailure $ Error { status: Just other, message: r.statusText }
instance showAPIError :: Show APIError whereshow = case _ ofForbidden -> "Forbidden"ParseFailure js e -> "ParseFailure (" <> show (stringify js) <> ") " <> show eError r -> "Error { status: " <> show r.status <> ", message: " <> r.message <> "}"parseJsonDate :: Json -> ExceptT String Effect DateTimeparseJsonDate json = dostr <- except $ decodeJson jsonparseDate str
parseDate :: String -> ExceptT String Effect DateTimeparseDate str = dojsDate <- lift $ JSDate.parse strexcept $ note ("Unable to convert date " <> show jsDate <> " to a valid DateTime value.")(JSDate.toDateTime jsDate)
creditToParser' mode f v =let
creditToParser' mode f v = dotn <- typename fif tn /= "credit_to_t"then returnError Incompatible f "column was not of type credit_to_t"else maybe empty (pure . parser . decodeUtf8) vwhere
parser "credit_to_address" =CreditToCurrency <$> (addressParser mode <* nullField <* nullField)parser "credit_to_user" =CreditToUser <$> (nullField *> nullField *> idParser UserId <* nullField)parser "credit_to_project" =CreditToProject<$> (nullField *> nullField *> nullField *> idParser ProjectId)parser _ = emptyindotn <- typename fif tn /= "credit_to_t"then returnError Incompatible f "column was not of type credit_to_t"else maybe empty (pure . parser . decodeUtf8) v
parser = \case"credit_to_address" -> CreditToCurrency <$> (addressParser mode <* nullField <* nullField)"credit_to_user" -> CreditToUser <$> (nullField *> nullField *> idParser UserId <* nullField)"credit_to_project" -> CreditToProject <$> (nullField *> nullField *> nullField *> idParser ProjectId)_ -> empty