{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Concurrent
import Control.Concurrent.STM
import Database.TigerBeetle.Account
import Database.TigerBeetle.Client
import Database.TigerBeetle.Client.Async qualified as Async
import Database.TigerBeetle.Response
main :: IO ()
main = do
result <- newTVarIO Nothing
let completionCallback _ response = do
atomically $ writeTVar result (Just response)
Async.withClient (ClusterId 0) (Address "3000") (Async.ThreadContext 0) completionCallback $ do
Async.createAccounts [CreateAccount (AccountId 9) (LedgerId 9) (AccountCode 1)]
await result
await :: TVar (Maybe Response) -> IO ()
await result = do
r <- readTVarIO result
case r of
Nothing -> threadDelay 3000 >> await result
Just yay -> print yay