module Botan.Low.Version (
botanFFIAPIVersion
, botanFFISupportsAPI
, botanVersionString
, botanVersionMajor
, botanVersionMinor
, botanVersionPatch
, botanVersionDatestamp
) where
import Botan.Bindings.ConstPtr (ConstPtr (..))
import Botan.Bindings.Version
import Botan.Low.Error.Internal (throwBotanCatchingInvalidInput)
import Botan.Low.Internal.ByteString
import Data.ByteString (ByteString)
botanFFIAPIVersion :: IO Int
botanFFIAPIVersion :: IO Int
botanFFIAPIVersion = Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32 -> Int) -> IO Word32 -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO Word32
botan_ffi_api_version
botanFFISupportsAPI :: Int -> IO Bool
botanFFISupportsAPI :: Int -> IO Bool
botanFFISupportsAPI Int
version = do
HasCallStack => IO CInt -> IO Bool
IO CInt -> IO Bool
throwBotanCatchingInvalidInput (IO CInt -> IO Bool) -> IO CInt -> IO Bool
forall a b. (a -> b) -> a -> b
$ Word32 -> IO CInt
botan_ffi_supports_api (Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
version)
botanVersionString :: IO ByteString
botanVersionString :: IO ByteString
botanVersionString = IO (ConstPtr CChar)
botan_version_string IO (ConstPtr CChar)
-> (ConstPtr CChar -> IO ByteString) -> IO ByteString
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= CString -> IO ByteString
peekCString (CString -> IO ByteString)
-> (ConstPtr CChar -> CString) -> ConstPtr CChar -> IO ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.unConstPtr)
botanVersionMajor :: IO Int
botanVersionMajor :: IO Int
botanVersionMajor = Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32 -> Int) -> IO Word32 -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO Word32
botan_version_major
botanVersionMinor :: IO Int
botanVersionMinor :: IO Int
botanVersionMinor = Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32 -> Int) -> IO Word32 -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO Word32
botan_version_minor
botanVersionPatch :: IO Int
botanVersionPatch :: IO Int
botanVersionPatch = Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32 -> Int) -> IO Word32 -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO Word32
botan_version_patch
botanVersionDatestamp :: IO Int
botanVersionDatestamp :: IO Int
botanVersionDatestamp = Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32 -> Int) -> IO Word32 -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO Word32
botan_version_datestamp