libmdbx-0.2.0.0: app/Main.hs
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
module Main where
import Control.Exception (bracket)
import Data.Default
import Data.Store
import Data.Text (Text)
import GHC.Generics
import Mdbx
import Mdbx.Store
data User = User {
_username :: !Text,
_password :: !Text
} deriving (Eq, Show, Generic, Store)
deriving via (MdbxItemStore User) instance MdbxItem User
openEnvDbi :: IO MdbxEnv
openEnvDbi = envOpen "./test.db" def [MdbxNosubdir, MdbxCoalesce, MdbxLiforeclaim]
userKey :: User -> Text
userKey user = "user-" <> _username user
main :: IO ()
main = bracket openEnvDbi envClose $ \env -> do
db <- dbiOpen env Nothing []
putItems env db pairs
getItems env db keys1 >>= print @[User]
getItems env db keys2 >>= print @[User]
getItems env db (_username <$> users) >>= print @[User]
getRange env db range1 range2 >>= mapM_ (print @User)
where
keys1 = ["mark", "dale"] :: [Text]
keys2 = ["john", "carl"] :: [Text]
range1 = "user-user-327" :: Text
range2 = "user-user-999" :: Text
pairs = (\u -> (userKey u, u)) <$> users
users = [
User "mark" "hide",
User "john" "test",
User "ernest" "password",
User "dale" "done",
User "carl" "past",
User "user-001" "test",
User "user-101" "test",
User "user-950" "test",
User "user-327" "test",
User "user-425" "test",
User "user-897" "test"
]