{-|
Module      : Botan.Low.View
Description : View functions
Copyright   : (c) 2023-2024, Apotheca Labs
              (c) 2024-2025, Haskell Foundation
License     : BSD-3-Clause
Maintainer  : joris@well-typed.com, leo@apotheca.io
Stability   : experimental
Portability : POSIX

This module is based on the [View
Functions](https://botan.randombit.net/handbook/api_ref/ffi.html#view-functions)
section of the C Botan FFI documentation.
-}

module Botan.Low.View (
    -- * View binary
    BotanViewBinFn
  , BotanViewBinCallback
  , viewBin
    -- * View string
  , BotanViewStrFn
  , BotanViewStrCallback
  , viewStr
  ) where

import           Botan.Bindings.View
import           Control.Exception

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