{-|
Module      : Botan.Low.View
Description : View functions
Copyright   : (c) Leo D, 2023
License     : BSD-3-Clause
Maintainer  : leo@apotheca.io
Stability   : experimental
Portability : POSIX
-}

module Botan.Low.View
(

  BotanViewBinFn(..)
, BotanViewBinCallback(..)
, viewBin
, BotanViewStrFn(..)
, BotanViewStrCallback(..)
, viewStr

)where

import qualified Data.ByteString as ByteString

import Data.Void

import System.IO

import Botan.Bindings.View

import Botan.Low.Error
import Botan.Low.Make
import Botan.Low.Prelude

viewBin :: BotanViewBinFn ctx -> (BotanViewBinCallback ctx -> IO a) -> IO a
viewBin :: forall ctx a.
BotanViewBinFn ctx -> (BotanViewBinCallback ctx -> IO a) -> IO a
viewBin BotanViewBinFn ctx
f = IO (BotanViewBinCallback ctx)
-> (BotanViewBinCallback ctx -> IO ())
-> (BotanViewBinCallback ctx -> IO a)
-> IO a
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (BotanViewBinFn ctx -> IO (BotanViewBinCallback ctx)
forall ctx. BotanViewBinFn ctx -> IO (BotanViewBinCallback ctx)
mallocBotanViewBinCallback BotanViewBinFn ctx
f) BotanViewBinCallback ctx -> IO ()
forall ctx. BotanViewBinCallback ctx -> IO ()
freeBotanViewBinCallback

viewStr :: BotanViewStrFn ctx -> (BotanViewStrCallback ctx -> IO a) -> IO a
viewStr :: forall ctx a.
BotanViewStrFn ctx -> (BotanViewStrCallback ctx -> IO a) -> IO a
viewStr BotanViewStrFn ctx
f = IO (BotanViewStrCallback ctx)
-> (BotanViewStrCallback ctx -> IO ())
-> (BotanViewStrCallback ctx -> IO a)
-> IO a
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (BotanViewStrFn ctx -> IO (BotanViewStrCallback ctx)
forall ctx. BotanViewStrFn ctx -> IO (BotanViewStrCallback ctx)
mallocBotanViewStrCallback BotanViewStrFn ctx
f) BotanViewStrCallback ctx -> IO ()
forall ctx. BotanViewStrCallback ctx -> IO ()
freeBotanViewStrCallback