diff options
Diffstat (limited to 'src/Erebos/Service.hs')
| -rw-r--r-- | src/Erebos/Service.hs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/Erebos/Service.hs b/src/Erebos/Service.hs new file mode 100644 index 0000000..e61e3e8 --- /dev/null +++ b/src/Erebos/Service.hs @@ -0,0 +1,47 @@ +module Erebos.Service ( + Service(..), + SomeService(..), someService, someServiceAttr, someServiceID, + SomeServiceState(..), fromServiceState, someServiceEmptyState, + SomeServiceGlobalState(..), fromServiceGlobalState, someServiceEmptyGlobalState, + SomeStorageWatcher(SomeStorageWatcher, GlobalStorageWatcher), + someStorageWatcher, someStorageWatcherHC, globalStorageWatcher, globalStorageWatcherH, + ServiceID, mkServiceID, + + ServiceHandler, + ServiceInput(..), + ServiceReply(..), + runServiceHandler, + + svcGet, svcSet, svcModify, + svcGetGlobal, svcSetGlobal, svcModifyGlobal, + svcGetLocal, svcSetLocal, + + svcSelf, + svcPrint, + + replyPacket, replyStored, replyStoredRef, + afterCommit, +) where + +import Control.Monad.Except + +import {-# SOURCE #-} Erebos.Network +import Erebos.Network.Protocol +import Erebos.State +import Erebos.Storable +import Erebos.Storage.Head + +import Service + + +someStorageWatcher :: forall s a. (Service s, Eq a) => (Stored LocalState -> a) -> (a -> ServiceHandler s ()) -> SomeStorageWatcher s +someStorageWatcher = SomeStorageWatcher + +someStorageWatcherHC :: forall s a. (Service s, Eq a) => (Stored LocalState -> HeadCacheType LocalState -> a) -> (a -> ServiceHandler s ()) -> SomeStorageWatcher s +someStorageWatcherHC = SomeStorageWatcherHC + +globalStorageWatcher :: forall s a. (Service s, Eq a) => (Stored LocalState -> a) -> (Server -> a -> ExceptT ErebosError IO ()) -> SomeStorageWatcher s +globalStorageWatcher = GlobalStorageWatcher + +globalStorageWatcherH :: forall s a. (Service s, Eq a) => (Head LocalState -> a) -> (Server -> a -> ExceptT ErebosError IO ()) -> SomeStorageWatcher s +globalStorageWatcherH = GlobalStorageWatcherH |