Merge pull request #1 from BeFunctional/edsko/pure-and-io-versions
Distinguish between IO and pure functions
This commit is contained in:
commit
ad7043bb75
2 changed files with 42 additions and 11 deletions
8
.github/workflows/haskell-ci.yml
vendored
8
.github/workflows/haskell-ci.yml
vendored
|
@ -1,6 +1,6 @@
|
||||||
# This GitHub workflow config has been generated by a script via
|
# This GitHub workflow config has been generated by a script via
|
||||||
#
|
#
|
||||||
# haskell-ci 'github' 'cabal.project'
|
# haskell-ci 'github' '--no-cabal-check' 'cabal.project'
|
||||||
#
|
#
|
||||||
# To regenerate the script (for example after adjusting tested-with) run
|
# To regenerate the script (for example after adjusting tested-with) run
|
||||||
#
|
#
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
#
|
#
|
||||||
# version: 0.15.20230312
|
# version: 0.15.20230312
|
||||||
#
|
#
|
||||||
# REGENDATA ("0.15.20230312",["github","cabal.project"])
|
# REGENDATA ("0.15.20230312",["github","--no-cabal-check","cabal.project"])
|
||||||
#
|
#
|
||||||
name: Haskell-CI
|
name: Haskell-CI
|
||||||
on:
|
on:
|
||||||
|
@ -214,10 +214,6 @@ jobs:
|
||||||
- name: tests
|
- name: tests
|
||||||
run: |
|
run: |
|
||||||
$CABAL v2-test $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --test-show-details=direct
|
$CABAL v2-test $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --test-show-details=direct
|
||||||
- name: cabal check
|
|
||||||
run: |
|
|
||||||
cd ${PKGDIR_foreign_rust} || false
|
|
||||||
${CABAL} -vnormal check
|
|
||||||
- name: haddock
|
- name: haddock
|
||||||
run: |
|
run: |
|
||||||
$CABAL v2-haddock --disable-documentation --haddock-all $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all
|
$CABAL v2-haddock --disable-documentation --haddock-all $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all
|
||||||
|
|
|
@ -13,6 +13,10 @@ module Foreign.Rust.Marshall.Variable (
|
||||||
, withBorshVarBuffer
|
, withBorshVarBuffer
|
||||||
, withBorshMaxBuffer
|
, withBorshMaxBuffer
|
||||||
, withBorshFailure
|
, withBorshFailure
|
||||||
|
-- ** Pure variants
|
||||||
|
, withPureBorshVarBuffer
|
||||||
|
, withPureBorshMaxBuffer
|
||||||
|
, withPureBorshFailure
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Codec.Borsh
|
import Codec.Borsh
|
||||||
|
@ -66,7 +70,7 @@ withBorshVarBuffer :: forall a.
|
||||||
, StaticBorshSize a ~ 'HasVariableSize
|
, StaticBorshSize a ~ 'HasVariableSize
|
||||||
, Typeable a
|
, Typeable a
|
||||||
)
|
)
|
||||||
=> (Buffer a -> IO ()) -> a
|
=> (Buffer a -> IO ()) -> IO a
|
||||||
withBorshVarBuffer = withBorshBufferOfInitSize 1024
|
withBorshVarBuffer = withBorshBufferOfInitSize 1024
|
||||||
|
|
||||||
withBorshMaxBuffer :: forall a.
|
withBorshMaxBuffer :: forall a.
|
||||||
|
@ -75,7 +79,7 @@ withBorshMaxBuffer :: forall a.
|
||||||
, BorshMaxSize a
|
, BorshMaxSize a
|
||||||
, Typeable a
|
, Typeable a
|
||||||
)
|
)
|
||||||
=> (Buffer a -> IO ()) -> a
|
=> (Buffer a -> IO ()) -> IO a
|
||||||
withBorshMaxBuffer =
|
withBorshMaxBuffer =
|
||||||
withBorshBufferOfInitSize initBufSize
|
withBorshBufferOfInitSize initBufSize
|
||||||
where
|
where
|
||||||
|
@ -89,8 +93,39 @@ withBorshFailure :: forall a.
|
||||||
, Typeable a
|
, Typeable a
|
||||||
, HasCallStack
|
, HasCallStack
|
||||||
)
|
)
|
||||||
|
=> (Buffer (Either Text a) -> IO ()) -> IO (Either Failure a)
|
||||||
|
withBorshFailure = fmap (first mkFailure) . withBorshVarBuffer
|
||||||
|
|
||||||
|
{-------------------------------------------------------------------------------
|
||||||
|
Pure variants
|
||||||
|
-------------------------------------------------------------------------------}
|
||||||
|
|
||||||
|
withPureBorshVarBuffer :: forall a.
|
||||||
|
( FromBorsh a
|
||||||
|
, StaticBorshSize a ~ 'HasVariableSize
|
||||||
|
, Typeable a
|
||||||
|
)
|
||||||
|
=> (Buffer a -> IO ()) -> a
|
||||||
|
withPureBorshVarBuffer = unsafePerformIO . withBorshVarBuffer
|
||||||
|
|
||||||
|
withPureBorshMaxBuffer :: forall a.
|
||||||
|
( FromBorsh a
|
||||||
|
, StaticBorshSize a ~ 'HasVariableSize
|
||||||
|
, BorshMaxSize a
|
||||||
|
, Typeable a
|
||||||
|
)
|
||||||
|
=> (Buffer a -> IO ()) -> a
|
||||||
|
withPureBorshMaxBuffer = unsafePerformIO . withBorshMaxBuffer
|
||||||
|
|
||||||
|
withPureBorshFailure :: forall a.
|
||||||
|
( FromBorsh a
|
||||||
|
, StaticBorshSize a ~ 'HasVariableSize
|
||||||
|
, Typeable a
|
||||||
|
, HasCallStack
|
||||||
|
)
|
||||||
=> (Buffer (Either Text a) -> IO ()) -> Either Failure a
|
=> (Buffer (Either Text a) -> IO ()) -> Either Failure a
|
||||||
withBorshFailure = first mkFailure . withBorshVarBuffer
|
withPureBorshFailure = unsafePerformIO . withBorshFailure
|
||||||
|
|
||||||
|
|
||||||
{-------------------------------------------------------------------------------
|
{-------------------------------------------------------------------------------
|
||||||
Internal auxiliary
|
Internal auxiliary
|
||||||
|
@ -102,8 +137,8 @@ withBorshBufferOfInitSize :: forall a.
|
||||||
, StaticBorshSize a ~ 'HasVariableSize
|
, StaticBorshSize a ~ 'HasVariableSize
|
||||||
, Typeable a
|
, Typeable a
|
||||||
)
|
)
|
||||||
=> CULong -> (Buffer a -> IO ()) -> a
|
=> CULong -> (Buffer a -> IO ()) -> IO a
|
||||||
withBorshBufferOfInitSize initBufSize f = unsafePerformIO $ do
|
withBorshBufferOfInitSize initBufSize f = do
|
||||||
mFirstAttempt <- allocaBytes (culongToInt initBufSize) $ \buf -> do
|
mFirstAttempt <- allocaBytes (culongToInt initBufSize) $ \buf -> do
|
||||||
(bigEnough, reqSz) <- callWithSize buf initBufSize
|
(bigEnough, reqSz) <- callWithSize buf initBufSize
|
||||||
if bigEnough then
|
if bigEnough then
|
||||||
|
|
Loading…
Reference in a new issue