shrub/pkg/hs/urbit-king/lib/Urbit/King/Scry.hs
fang 5615b5dc1a
king: factor scrying logic into helper lib
Takes care of constructing the full scry path based off the given
components. Fills in timestamp with the current time. Logs errors on
result conversion failures.
2020-10-28 19:59:48 +01:00

32 lines
776 B
Haskell

{-|
Scry helpers
-}
module Urbit.King.Scry (scryNow) where
import Urbit.Prelude
import Urbit.Vere.Serf.Types
import qualified Urbit.Noun.Time as Time
scryNow :: forall e n
. (HasLogFunc e, FromNoun n)
=> (Time.Wen -> Gang -> Path -> IO (Maybe (Term, Noun)))
-> Text
-> Ship
-> Text
-> [Text]
-> RIO e (Maybe n)
scryNow scry vare ship desk path = do
env <- ask
wen <- io Time.now
let wan = tshow $ Time.MkDate wen
let pax = Path $ fmap MkKnot $ vare : (tshow ship) : desk : wan : path
io (scry wen Nothing pax) >>= \case
Just (_, fromNoun @n -> Just v) -> pure $ Just v
Just (_, n) -> do
logError $ displayShow (vare, "uncanny scry result", pax, n)
pure Nothing
Nothing -> pure Nothing