{-# LANGUAGE FlexibleContexts  #-}
{-# LANGUAGE OverloadedStrings #-}

-- |
-- Module      :  Network.Polkadot.Rpc.Offchain
-- Copyright   :  Aleksandr Krupenkin 2016-2024
-- License     :  Apache-2.0
--
-- Maintainer  :  mail@akru.me
-- Stability   :  experimental
-- Portability :  portable
--
-- Polkadot RPC methods with `offchain` prefix.
--

module Network.Polkadot.Rpc.Offchain where

import           Data.ByteArray.HexString   (HexString)
import           Network.JsonRpc.TinyClient (JsonRpc (..))

import           Network.Polkadot.Rpc.Types (StorageKind)

-- | Get offchain local storage under given key and prefix.
localStorageGet :: JsonRpc m
                => StorageKind
                -- ^ Offchain storage kind
                -> HexString
                -- ^ Key
                -> m (Maybe HexString)
{-# INLINE localStorageGet #-}
localStorageGet :: forall (m :: * -> *).
JsonRpc m =>
StorageKind -> HexString -> m (Maybe HexString)
localStorageGet = MethodName -> StorageKind -> HexString -> m (Maybe HexString)
forall a. Remote m a => MethodName -> a
forall (m :: * -> *) a. (JsonRpc m, Remote m a) => MethodName -> a
remote MethodName
"offchain_localStorageGet"

-- | Set offchain local storage under given key and prefix
localStorageSet :: JsonRpc m
                => StorageKind
                -- ^ Offchain storage kind
                -> HexString
                -- ^ Key
                -> HexString
                -- ^ Value
                -> m ()
{-# INLINE localStorageSet #-}
localStorageSet :: forall (m :: * -> *).
JsonRpc m =>
StorageKind -> HexString -> HexString -> m ()
localStorageSet = MethodName -> StorageKind -> HexString -> HexString -> m ()
forall a. Remote m a => MethodName -> a
forall (m :: * -> *) a. (JsonRpc m, Remote m a) => MethodName -> a
remote MethodName
"offchain_localStorageSet"