2014-06-03 19:10:54 +04:00
|
|
|
{-# LANGUAGE DeriveDataTypeable #-}
|
|
|
|
{-# LANGUAGE GADTs #-}
|
|
|
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
|
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
|
|
{-# LANGUAGE StandaloneDeriving #-}
|
|
|
|
{-# LANGUAGE TypeFamilies #-}
|
|
|
|
{-# LANGUAGE TypeSynonymInstances #-}
|
|
|
|
{-# LANGUAGE FlexibleInstances #-}
|
|
|
|
|
|
|
|
module MockTAO (
|
|
|
|
Id(..),
|
|
|
|
initGlobalState,
|
|
|
|
assocRangeId2s,
|
|
|
|
friendsAssoc,
|
2015-05-01 22:23:11 +03:00
|
|
|
friendsOf,
|
2014-06-03 19:10:54 +04:00
|
|
|
) where
|
|
|
|
|
|
|
|
import Data.Hashable
|
|
|
|
import Data.Map (Map)
|
|
|
|
import Data.Typeable
|
|
|
|
import Prelude ()
|
|
|
|
import qualified Data.Map as Map
|
|
|
|
import qualified Data.Text as Text
|
|
|
|
|
|
|
|
import Haxl.Prelude
|
|
|
|
import Haxl.Core
|
|
|
|
|
|
|
|
import TestTypes
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
-- Minimal mock TAO
|
|
|
|
|
|
|
|
data TAOReq a where
|
|
|
|
AssocRangeId2s :: Id -> Id -> TAOReq [Id]
|
|
|
|
deriving Typeable
|
|
|
|
|
|
|
|
deriving instance Show (TAOReq a)
|
|
|
|
deriving instance Eq (TAOReq a)
|
|
|
|
|
2016-12-10 01:18:58 +03:00
|
|
|
instance ShowP TAOReq where showp = show
|
2014-06-03 19:10:54 +04:00
|
|
|
|
|
|
|
instance Hashable (TAOReq a) where
|
|
|
|
hashWithSalt s (AssocRangeId2s a b) = hashWithSalt s (a,b)
|
|
|
|
|
|
|
|
instance StateKey TAOReq where
|
|
|
|
data State TAOReq = TAOState {}
|
|
|
|
|
|
|
|
instance DataSourceName TAOReq where
|
|
|
|
dataSourceName _ = "MockTAO"
|
|
|
|
|
|
|
|
instance DataSource UserEnv TAOReq where
|
|
|
|
fetch _state _flags _user bfs = SyncFetch $ mapM_ doFetch bfs
|
|
|
|
|
|
|
|
initGlobalState :: IO (State TAOReq)
|
|
|
|
initGlobalState = return TAOState {}
|
|
|
|
|
|
|
|
doFetch :: BlockedFetch TAOReq -> IO ()
|
|
|
|
doFetch (BlockedFetch req@(AssocRangeId2s a b) r) =
|
|
|
|
case Map.lookup (a, b) assocs of
|
|
|
|
Nothing -> putFailure r . NotFound . Text.pack $ show req
|
|
|
|
Just result -> putSuccess r result
|
|
|
|
|
|
|
|
assocs :: Map (Id,Id) [Id]
|
|
|
|
assocs = Map.fromList [
|
|
|
|
((friendsAssoc, 1), [5..10]),
|
|
|
|
((friendsAssoc, 2), [7..12]),
|
|
|
|
((friendsAssoc, 3), [10..15]),
|
|
|
|
((friendsAssoc, 4), [15..19])
|
|
|
|
]
|
|
|
|
|
|
|
|
friendsAssoc :: Id
|
|
|
|
friendsAssoc = 167367433327742
|
|
|
|
|
|
|
|
assocRangeId2s :: Id -> Id -> Haxl [Id]
|
|
|
|
assocRangeId2s a b = dataFetch (AssocRangeId2s a b)
|
2015-05-01 22:23:11 +03:00
|
|
|
|
|
|
|
friendsOf :: Id -> Haxl [Id]
|
|
|
|
friendsOf = assocRangeId2s friendsAssoc
|