{-# OPTIONS_HADDOCK show-extensions #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MagicHash #-}
module Libjwt.FFI.Jwt
( JwtIO
, unsafePerformJwtIO
, JwtT
, mkJwtT
, jwtDecode
, jwtEncode
, addGrant
, addGrantBool
, addGrantInt
, addGrantInt64
, addGrantsFromJson
, jwtSetAlg
, addHeader
, getGrant
, getGrantBool
, getGrantInt
, getGrantInt64
, getGrantAsJson
, jwtGetAlg
, getHeader
, unsafeAddGrant
, unsafeAddGrantBool
, unsafeAddGrantInt
, unsafeAddGrantInt64
, unsafeAddHeader
, unsafeGetGrant
, unsafeGetGrantBool
, unsafeGetGrantInt
, unsafeGetGrantInt64
, unsafeGetGrantAsJson
, unsafeGetHeader
, JsonToken(..)
, unsafeMapTokenizedJsonArray
)
where
import Libjwt.FFI.Libjwt
import Libjwt.FFI.Jsmn
import Control.Exception ( throwIO )
import Control.Monad ( void
, (<=<)
)
import Control.Monad.Catch ( MonadCatch
, MonadThrow
)
import Control.Monad.Extra ( whenMaybe
, loopM
)
import Control.Monad.Trans.State.Strict
import Control.Monad.Trans.Class ( lift )
import Data.ByteString ( ByteString
, useAsCString
, packCString
, packCStringLen
, null
)
import Data.ByteString.Unsafe ( unsafePackMallocCString
, unsafeUseAsCStringLen
)
import Foreign hiding ( void )
import Foreign.C.Types
import Foreign.C.String
import Foreign.C.Error
import GHC.Base ( unpackCString# )
import GHC.Exts
import System.IO.Unsafe ( unsafePerformIO )
import Prelude hiding ( null )
newtype JwtIO a = JIO (IO a)
deriving newtype (a -> JwtIO b -> JwtIO a
(a -> b) -> JwtIO a -> JwtIO b
(forall a b. (a -> b) -> JwtIO a -> JwtIO b)
-> (forall a b. a -> JwtIO b -> JwtIO a) -> Functor JwtIO
forall a b. a -> JwtIO b -> JwtIO a
forall a b. (a -> b) -> JwtIO a -> JwtIO b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> JwtIO b -> JwtIO a
$c<$ :: forall a b. a -> JwtIO b -> JwtIO a
fmap :: (a -> b) -> JwtIO a -> JwtIO b
$cfmap :: forall a b. (a -> b) -> JwtIO a -> JwtIO b
Functor, Functor JwtIO
a -> JwtIO a
Functor JwtIO
-> (forall a. a -> JwtIO a)
-> (forall a b. JwtIO (a -> b) -> JwtIO a -> JwtIO b)
-> (forall a b c. (a -> b -> c) -> JwtIO a -> JwtIO b -> JwtIO c)
-> (forall a b. JwtIO a -> JwtIO b -> JwtIO b)
-> (forall a b. JwtIO a -> JwtIO b -> JwtIO a)
-> Applicative JwtIO
JwtIO a -> JwtIO b -> JwtIO b
JwtIO a -> JwtIO b -> JwtIO a
JwtIO (a -> b) -> JwtIO a -> JwtIO b
(a -> b -> c) -> JwtIO a -> JwtIO b -> JwtIO c
forall a. a -> JwtIO a
forall a b. JwtIO a -> JwtIO b -> JwtIO a
forall a b. JwtIO a -> JwtIO b -> JwtIO b
forall a b. JwtIO (a -> b) -> JwtIO a -> JwtIO b
forall a b c. (a -> b -> c) -> JwtIO a -> JwtIO b -> JwtIO c
forall (f :: * -> *).
Functor f
-> (forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
<* :: JwtIO a -> JwtIO b -> JwtIO a
$c<* :: forall a b. JwtIO a -> JwtIO b -> JwtIO a
*> :: JwtIO a -> JwtIO b -> JwtIO b
$c*> :: forall a b. JwtIO a -> JwtIO b -> JwtIO b
liftA2 :: (a -> b -> c) -> JwtIO a -> JwtIO b -> JwtIO c
$cliftA2 :: forall a b c. (a -> b -> c) -> JwtIO a -> JwtIO b -> JwtIO c
<*> :: JwtIO (a -> b) -> JwtIO a -> JwtIO b
$c<*> :: forall a b. JwtIO (a -> b) -> JwtIO a -> JwtIO b
pure :: a -> JwtIO a
$cpure :: forall a. a -> JwtIO a
$cp1Applicative :: Functor JwtIO
Applicative, Applicative JwtIO
a -> JwtIO a
Applicative JwtIO
-> (forall a b. JwtIO a -> (a -> JwtIO b) -> JwtIO b)
-> (forall a b. JwtIO a -> JwtIO b -> JwtIO b)
-> (forall a. a -> JwtIO a)
-> Monad JwtIO
JwtIO a -> (a -> JwtIO b) -> JwtIO b
JwtIO a -> JwtIO b -> JwtIO b
forall a. a -> JwtIO a
forall a b. JwtIO a -> JwtIO b -> JwtIO b
forall a b. JwtIO a -> (a -> JwtIO b) -> JwtIO b
forall (m :: * -> *).
Applicative m
-> (forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
return :: a -> JwtIO a
$creturn :: forall a. a -> JwtIO a
>> :: JwtIO a -> JwtIO b -> JwtIO b
$c>> :: forall a b. JwtIO a -> JwtIO b -> JwtIO b
>>= :: JwtIO a -> (a -> JwtIO b) -> JwtIO b
$c>>= :: forall a b. JwtIO a -> (a -> JwtIO b) -> JwtIO b
$cp1Monad :: Applicative JwtIO
Monad, Monad JwtIO
e -> JwtIO a
Monad JwtIO
-> (forall e a. Exception e => e -> JwtIO a) -> MonadThrow JwtIO
forall e a. Exception e => e -> JwtIO a
forall (m :: * -> *).
Monad m -> (forall e a. Exception e => e -> m a) -> MonadThrow m
throwM :: e -> JwtIO a
$cthrowM :: forall e a. Exception e => e -> JwtIO a
$cp1MonadThrow :: Monad JwtIO
MonadThrow, MonadThrow JwtIO
MonadThrow JwtIO
-> (forall e a.
Exception e =>
JwtIO a -> (e -> JwtIO a) -> JwtIO a)
-> MonadCatch JwtIO
JwtIO a -> (e -> JwtIO a) -> JwtIO a
forall e a. Exception e => JwtIO a -> (e -> JwtIO a) -> JwtIO a
forall (m :: * -> *).
MonadThrow m
-> (forall e a. Exception e => m a -> (e -> m a) -> m a)
-> MonadCatch m
catch :: JwtIO a -> (e -> JwtIO a) -> JwtIO a
$ccatch :: forall e a. Exception e => JwtIO a -> (e -> JwtIO a) -> JwtIO a
$cp1MonadCatch :: MonadThrow JwtIO
MonadCatch)
newtype JwtT = JwtT (ForeignPtr JwtT)
unsafePerformJwtIO :: JwtIO a -> a
unsafePerformJwtIO :: JwtIO a -> a
unsafePerformJwtIO (JIO IO a
io) = IO a -> a
forall a. IO a -> a
unsafePerformIO IO a
io
mkJwtT :: JwtIO JwtT
mkJwtT :: JwtIO JwtT
mkJwtT = IO JwtT -> JwtIO JwtT
forall a. IO a -> JwtIO a
JIO (IO JwtT -> JwtIO JwtT) -> IO JwtT -> JwtIO JwtT
forall a b. (a -> b) -> a -> b
$ String -> (Ptr PJwtT -> IO CInt) -> IO JwtT
mkJwtT_ String
"jwt_new" Ptr PJwtT -> IO CInt
c_jwt_new
jwtDecode :: ByteString -> ByteString -> JwtIO JwtT
jwtDecode :: ByteString -> ByteString -> JwtIO JwtT
jwtDecode ByteString
key ByteString
token = IO JwtT -> JwtIO JwtT
forall a. IO a -> JwtIO a
JIO
(IO JwtT -> JwtIO JwtT) -> IO JwtT -> JwtIO JwtT
forall a b. (a -> b) -> a -> b
$ (if ByteString -> Bool
null ByteString
key then (((Ptr CChar, Int) -> IO JwtT) -> (Ptr CChar, Int) -> IO JwtT
forall a b. (a -> b) -> a -> b
$ (Ptr CChar
forall a. Ptr a
nullPtr, Int
0)) else ByteString -> ((Ptr CChar, Int) -> IO JwtT) -> IO JwtT
forall a. ByteString -> ((Ptr CChar, Int) -> IO a) -> IO a
unsafeUseAsCStringLen ByteString
key) (Ptr CChar, Int) -> IO JwtT
forall a. Integral a => (Ptr CChar, a) -> IO JwtT
doDecode
where
doDecode :: (Ptr CChar, a) -> IO JwtT
doDecode (Ptr CChar
p_key, a
key_len) = ByteString -> (Ptr CChar -> IO JwtT) -> IO JwtT
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString ByteString
token ((Ptr CChar -> IO JwtT) -> IO JwtT)
-> (Ptr CChar -> IO JwtT) -> IO JwtT
forall a b. (a -> b) -> a -> b
$ \Ptr CChar
p_token ->
String -> (Ptr PJwtT -> IO CInt) -> IO JwtT
mkJwtT_ String
"jwt_decode"
((Ptr PJwtT -> IO CInt) -> IO JwtT)
-> (Ptr PJwtT -> IO CInt) -> IO JwtT
forall a b. (a -> b) -> a -> b
$ \Ptr PJwtT
ret -> Ptr PJwtT -> Ptr CChar -> Ptr CChar -> CInt -> IO CInt
c_jwt_decode Ptr PJwtT
ret Ptr CChar
p_token Ptr CChar
p_key (CInt -> IO CInt) -> CInt -> IO CInt
forall a b. (a -> b) -> a -> b
$ a -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
key_len
mkJwtT_ :: String -> (Ptr PJwtT -> IO CInt) -> IO JwtT
mkJwtT_ :: String -> (Ptr PJwtT -> IO CInt) -> IO JwtT
mkJwtT_ String
loc Ptr PJwtT -> IO CInt
ctr = (Ptr PJwtT -> IO JwtT) -> IO JwtT
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca ((Ptr PJwtT -> IO JwtT) -> IO JwtT)
-> (Ptr PJwtT -> IO JwtT) -> IO JwtT
forall a b. (a -> b) -> a -> b
$ \Ptr PJwtT
ptr -> do
CInt
res <- Ptr PJwtT -> IO CInt
ctr Ptr PJwtT
ptr
if CInt
res CInt -> CInt -> Bool
forall a. Eq a => a -> a -> Bool
== CInt
0 then PJwtT -> IO JwtT
wrapJwtPtr (PJwtT -> IO JwtT) -> IO PJwtT -> IO JwtT
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr PJwtT -> IO PJwtT
forall a. Storable a => Ptr a -> IO a
peek Ptr PJwtT
ptr else String -> Errno -> IO JwtT
forall a. String -> Errno -> IO a
throwLibjwt String
loc (Errno -> IO JwtT) -> Errno -> IO JwtT
forall a b. (a -> b) -> a -> b
$ CInt -> Errno
Errno CInt
res
type PJwtT = Ptr JwtT
{-# RULES
"addGrant/unsafeAddGrant" forall s . addGrant (unpackCString# s) = unsafeAddGrant s
"addGrantBool/unsafeAddGrantBool" forall s . addGrantBool (unpackCString# s) = unsafeAddGrantBool s
"addGrantInt64/unsafeAddGrantInt64" forall s . addGrantInt64 (unpackCString# s) = unsafeAddGrantInt64 s
"addGrantInt/unsafeAddGrantInt" forall s . addGrantInt (unpackCString# s) = unsafeAddGrantInt s
"addHeader/unsafeAddHeader" forall s . addHeader (unpackCString# s) = unsafeAddHeader s #-}
{-# INLINE [0] addGrant #-}
{-# INLINE [0] addGrantBool #-}
{-# INLINE [0] addGrantInt64 #-}
{-# INLINE [0] addGrantInt #-}
{-# INLINE [0] addHeader #-}
addGrant :: String -> ByteString -> JwtT -> JwtIO ()
addGrant :: String -> ByteString -> JwtT -> JwtIO ()
addGrant String
grant ByteString
val JwtT
jwt = IO () -> JwtIO ()
forall a. IO a -> JwtIO a
JIO (IO () -> JwtIO ()) -> IO () -> JwtIO ()
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO ()) -> IO ()
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString ByteString
val ((Ptr CChar -> IO ()) -> IO ()) -> (Ptr CChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CChar
p_val ->
String
-> (PJwtT -> Ptr CChar -> Ptr CChar -> IO CInt)
-> String
-> Ptr CChar
-> JwtT
-> IO ()
forall p.
String
-> (PJwtT -> Ptr CChar -> p -> IO CInt)
-> String
-> p
-> JwtT
-> IO ()
_addGrant String
"jwt_add_grant" PJwtT -> Ptr CChar -> Ptr CChar -> IO CInt
c_jwt_add_grant String
grant Ptr CChar
p_val JwtT
jwt
unsafeAddGrant :: Addr# -> ByteString -> JwtT -> JwtIO ()
unsafeAddGrant :: Addr# -> ByteString -> JwtT -> JwtIO ()
unsafeAddGrant Addr#
p_grant ByteString
val JwtT
jwt = IO () -> JwtIO ()
forall a. IO a -> JwtIO a
JIO (IO () -> JwtIO ()) -> IO () -> JwtIO ()
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO ()) -> IO ()
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString ByteString
val ((Ptr CChar -> IO ()) -> IO ()) -> (Ptr CChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CChar
p_val ->
String
-> (PJwtT -> Ptr CChar -> Ptr CChar -> IO CInt)
-> Addr#
-> Ptr CChar
-> JwtT
-> IO ()
forall p.
String
-> (PJwtT -> Ptr CChar -> p -> IO CInt)
-> Addr#
-> p
-> JwtT
-> IO ()
_unsafeAddGrant String
"jwt_add_grant" PJwtT -> Ptr CChar -> Ptr CChar -> IO CInt
c_jwt_add_grant Addr#
p_grant Ptr CChar
p_val JwtT
jwt
addGrantBool :: String -> Bool -> JwtT -> JwtIO ()
addGrantBool :: String -> Bool -> JwtT -> JwtIO ()
addGrantBool String
grant =
(JwtT -> IO ()) -> JwtT -> JwtIO ()
coerce ((JwtT -> IO ()) -> JwtT -> JwtIO ())
-> (Bool -> JwtT -> IO ()) -> Bool -> JwtT -> JwtIO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String
-> (PJwtT -> Ptr CChar -> CInt -> IO CInt)
-> String
-> CInt
-> JwtT
-> IO ()
forall p.
String
-> (PJwtT -> Ptr CChar -> p -> IO CInt)
-> String
-> p
-> JwtT
-> IO ()
_addGrant String
"jwt_add_grant_bool" PJwtT -> Ptr CChar -> CInt -> IO CInt
c_jwt_add_grant_bool String
grant (CInt -> JwtT -> IO ()) -> (Bool -> CInt) -> Bool -> JwtT -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> CInt
forall a. Num a => Bool -> a
fromBool
unsafeAddGrantBool :: Addr# -> Bool -> JwtT -> JwtIO ()
unsafeAddGrantBool :: Addr# -> Bool -> JwtT -> JwtIO ()
unsafeAddGrantBool Addr#
p_grant =
(JwtT -> IO ()) -> JwtT -> JwtIO ()
coerce
((JwtT -> IO ()) -> JwtT -> JwtIO ())
-> (Bool -> JwtT -> IO ()) -> Bool -> JwtT -> JwtIO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String
-> (PJwtT -> Ptr CChar -> CInt -> IO CInt)
-> Addr#
-> CInt
-> JwtT
-> IO ()
forall p.
String
-> (PJwtT -> Ptr CChar -> p -> IO CInt)
-> Addr#
-> p
-> JwtT
-> IO ()
_unsafeAddGrant String
"jwt_add_grant_bool" PJwtT -> Ptr CChar -> CInt -> IO CInt
c_jwt_add_grant_bool Addr#
p_grant
(CInt -> JwtT -> IO ()) -> (Bool -> CInt) -> Bool -> JwtT -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> CInt
forall a. Num a => Bool -> a
fromBool
addGrantInt64 :: String -> Int64 -> JwtT -> JwtIO ()
addGrantInt64 :: String -> Int64 -> JwtT -> JwtIO ()
addGrantInt64 String
grant =
(JwtT -> IO ()) -> JwtT -> JwtIO ()
coerce ((JwtT -> IO ()) -> JwtT -> JwtIO ())
-> (Int64 -> JwtT -> IO ()) -> Int64 -> JwtT -> JwtIO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String
-> (PJwtT -> Ptr CChar -> CLong -> IO CInt)
-> String
-> CLong
-> JwtT
-> IO ()
forall p.
String
-> (PJwtT -> Ptr CChar -> p -> IO CInt)
-> String
-> p
-> JwtT
-> IO ()
_addGrant String
"jwt_add_grant_int" PJwtT -> Ptr CChar -> CLong -> IO CInt
c_jwt_add_grant_int String
grant (CLong -> JwtT -> IO ())
-> (Int64 -> CLong) -> Int64 -> JwtT -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> CLong
coerce
unsafeAddGrantInt64 :: Addr# -> Int64 -> JwtT -> JwtIO ()
unsafeAddGrantInt64 :: Addr# -> Int64 -> JwtT -> JwtIO ()
unsafeAddGrantInt64 Addr#
p_grant =
(JwtT -> IO ()) -> JwtT -> JwtIO ()
coerce
((JwtT -> IO ()) -> JwtT -> JwtIO ())
-> (Int64 -> JwtT -> IO ()) -> Int64 -> JwtT -> JwtIO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String
-> (PJwtT -> Ptr CChar -> CLong -> IO CInt)
-> Addr#
-> CLong
-> JwtT
-> IO ()
forall p.
String
-> (PJwtT -> Ptr CChar -> p -> IO CInt)
-> Addr#
-> p
-> JwtT
-> IO ()
_unsafeAddGrant String
"jwt_add_grant_int" PJwtT -> Ptr CChar -> CLong -> IO CInt
c_jwt_add_grant_int Addr#
p_grant
(CLong -> JwtT -> IO ())
-> (Int64 -> CLong) -> Int64 -> JwtT -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> CLong
coerce
addGrantInt :: String -> Int -> JwtT -> JwtIO ()
addGrantInt :: String -> Int -> JwtT -> JwtIO ()
addGrantInt String
grant =
(JwtT -> IO ()) -> JwtT -> JwtIO ()
coerce
((JwtT -> IO ()) -> JwtT -> JwtIO ())
-> (Int -> JwtT -> IO ()) -> Int -> JwtT -> JwtIO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String
-> (PJwtT -> Ptr CChar -> CLong -> IO CInt)
-> String
-> CLong
-> JwtT
-> IO ()
forall p.
String
-> (PJwtT -> Ptr CChar -> p -> IO CInt)
-> String
-> p
-> JwtT
-> IO ()
_addGrant String
"jwt_add_grant_int" PJwtT -> Ptr CChar -> CLong -> IO CInt
c_jwt_add_grant_int String
grant
(CLong -> JwtT -> IO ()) -> (Int -> CLong) -> Int -> JwtT -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> CLong
forall a b. (Integral a, Num b) => a -> b
fromIntegral
unsafeAddGrantInt :: Addr# -> Int -> JwtT -> JwtIO ()
unsafeAddGrantInt :: Addr# -> Int -> JwtT -> JwtIO ()
unsafeAddGrantInt Addr#
p_grant =
(JwtT -> IO ()) -> JwtT -> JwtIO ()
coerce
((JwtT -> IO ()) -> JwtT -> JwtIO ())
-> (Int -> JwtT -> IO ()) -> Int -> JwtT -> JwtIO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String
-> (PJwtT -> Ptr CChar -> CLong -> IO CInt)
-> Addr#
-> CLong
-> JwtT
-> IO ()
forall p.
String
-> (PJwtT -> Ptr CChar -> p -> IO CInt)
-> Addr#
-> p
-> JwtT
-> IO ()
_unsafeAddGrant String
"jwt_add_grant_int" PJwtT -> Ptr CChar -> CLong -> IO CInt
c_jwt_add_grant_int Addr#
p_grant
(CLong -> JwtT -> IO ()) -> (Int -> CLong) -> Int -> JwtT -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> CLong
forall a b. (Integral a, Num b) => a -> b
fromIntegral
_addGrant
:: String
-> (PJwtT -> CString -> p -> IO CInt)
-> String
-> p
-> JwtT
-> IO ()
_addGrant :: String
-> (PJwtT -> Ptr CChar -> p -> IO CInt)
-> String
-> p
-> JwtT
-> IO ()
_addGrant String
loc PJwtT -> Ptr CChar -> p -> IO CInt
f String
grant p
val (JwtT ForeignPtr JwtT
pjwt_t) = ForeignPtr JwtT -> (PJwtT -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO ()) -> IO ()) -> (PJwtT -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
String -> (Ptr CChar -> IO ()) -> IO ()
forall a. String -> (Ptr CChar -> IO a) -> IO a
withCAString String
grant ((Ptr CChar -> IO ()) -> IO ()) -> (Ptr CChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CChar
p_grant -> String -> IO CInt -> IO ()
throwIfNonZero_ String
loc (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ PJwtT -> Ptr CChar -> p -> IO CInt
f PJwtT
jwt Ptr CChar
p_grant p
val
_unsafeAddGrant
:: String -> (PJwtT -> CString -> p -> IO CInt) -> Addr# -> p -> JwtT -> IO ()
_unsafeAddGrant :: String
-> (PJwtT -> Ptr CChar -> p -> IO CInt)
-> Addr#
-> p
-> JwtT
-> IO ()
_unsafeAddGrant String
loc PJwtT -> Ptr CChar -> p -> IO CInt
f Addr#
p_grant p
val (JwtT ForeignPtr JwtT
pjwt_t) =
ForeignPtr JwtT -> (PJwtT -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO ()) -> IO ()) -> (PJwtT -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt -> String -> IO CInt -> IO ()
throwIfNonZero_ String
loc (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ PJwtT -> Ptr CChar -> p -> IO CInt
f PJwtT
jwt (Addr# -> Ptr CChar
forall a. Addr# -> Ptr a
Ptr Addr#
p_grant) p
val
addGrantsFromJson :: ByteString -> JwtT -> JwtIO ()
addGrantsFromJson :: ByteString -> JwtT -> JwtIO ()
addGrantsFromJson ByteString
json (JwtT ForeignPtr JwtT
pjwt_t) = IO () -> JwtIO ()
forall a. IO a -> JwtIO a
JIO (IO () -> JwtIO ()) -> IO () -> JwtIO ()
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT -> (PJwtT -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO ()) -> IO ()) -> (PJwtT -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
ByteString -> (Ptr CChar -> IO ()) -> IO ()
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString ByteString
json
((Ptr CChar -> IO ()) -> IO ()) -> (Ptr CChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO CInt -> IO ()
throwIfNonZero_ String
"jwt_add_grants_json"
(IO CInt -> IO ()) -> (Ptr CChar -> IO CInt) -> Ptr CChar -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PJwtT -> Ptr CChar -> IO CInt
c_jwt_add_grants_json PJwtT
jwt
jwtSetAlg :: JwtAlgT -> ByteString -> JwtT -> JwtIO ()
jwtSetAlg :: JwtAlgT -> ByteString -> JwtT -> JwtIO ()
jwtSetAlg JwtAlgT
alg ByteString
key (JwtT ForeignPtr JwtT
pjwt_t) = IO () -> JwtIO ()
forall a. IO a -> JwtIO a
JIO (IO () -> JwtIO ()) -> IO () -> JwtIO ()
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT -> (PJwtT -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO ()) -> IO ()) -> (PJwtT -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
if JwtAlgT
alg JwtAlgT -> JwtAlgT -> Bool
forall a. Eq a => a -> a -> Bool
== JwtAlgT
jwtAlgNone
then IO CInt -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ PJwtT -> JwtAlgT -> Ptr CChar -> CInt -> IO CInt
c_jwt_set_alg PJwtT
jwt JwtAlgT
jwtAlgNone Ptr CChar
forall a. Ptr a
nullPtr CInt
0
else ByteString -> ((Ptr CChar, Int) -> IO ()) -> IO ()
forall a. ByteString -> ((Ptr CChar, Int) -> IO a) -> IO a
unsafeUseAsCStringLen ByteString
key (((Ptr CChar, Int) -> IO ()) -> IO ())
-> ((Ptr CChar, Int) -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \(Ptr CChar
p_key, Int
keylen) ->
String -> IO CInt -> IO ()
throwIfNonZero_ String
"jwt_set_alg" (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ PJwtT -> JwtAlgT -> Ptr CChar -> CInt -> IO CInt
c_jwt_set_alg PJwtT
jwt JwtAlgT
alg Ptr CChar
p_key (CInt -> IO CInt) -> CInt -> IO CInt
forall a b. (a -> b) -> a -> b
$ Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral
Int
keylen
addHeader :: String -> ByteString -> JwtT -> JwtIO ()
String
h ByteString
val (JwtT ForeignPtr JwtT
pjwt_t) =
IO () -> JwtIO ()
forall a. IO a -> JwtIO a
JIO (IO () -> JwtIO ()) -> IO () -> JwtIO ()
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO ()) -> IO ()
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString ByteString
val ((Ptr CChar -> IO ()) -> IO ()) -> (Ptr CChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CChar
p_val -> ForeignPtr JwtT -> (PJwtT -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO ()) -> IO ()) -> (PJwtT -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
String -> (Ptr CChar -> IO ()) -> IO ()
forall a. String -> (Ptr CChar -> IO a) -> IO a
withCAString String
h ((Ptr CChar -> IO ()) -> IO ()) -> (Ptr CChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CChar
ph ->
String -> IO CInt -> IO ()
throwIfNonZero_ String
"jwt_add_header" (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ PJwtT -> Ptr CChar -> Ptr CChar -> IO CInt
c_jwt_add_header PJwtT
jwt Ptr CChar
ph Ptr CChar
p_val
unsafeAddHeader :: Addr# -> ByteString -> JwtT -> JwtIO ()
Addr#
p_header ByteString
val (JwtT ForeignPtr JwtT
pjwt_t) =
IO () -> JwtIO ()
forall a. IO a -> JwtIO a
JIO (IO () -> JwtIO ()) -> IO () -> JwtIO ()
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO ()) -> IO ()
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString ByteString
val ((Ptr CChar -> IO ()) -> IO ()) -> (Ptr CChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CChar
p_val -> ForeignPtr JwtT -> (PJwtT -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO ()) -> IO ()) -> (PJwtT -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
String -> IO CInt -> IO ()
throwIfNonZero_ String
"jwt_add_header" (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ PJwtT -> Ptr CChar -> Ptr CChar -> IO CInt
c_jwt_add_header PJwtT
jwt (Addr# -> Ptr CChar
forall a. Addr# -> Ptr a
Ptr Addr#
p_header) Ptr CChar
p_val
jwtEncode :: JwtT -> JwtIO ByteString
jwtEncode :: JwtT -> JwtIO ByteString
jwtEncode (JwtT ForeignPtr JwtT
pjwt_t) =
IO ByteString -> JwtIO ByteString
forall a. IO a -> JwtIO a
JIO
(IO ByteString -> JwtIO ByteString)
-> IO ByteString -> JwtIO ByteString
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT -> (PJwtT -> IO ByteString) -> IO ByteString
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t
((PJwtT -> IO ByteString) -> IO ByteString)
-> (PJwtT -> IO ByteString) -> IO ByteString
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> IO ByteString
unsafePackMallocCString
(Ptr CChar -> IO ByteString)
-> (PJwtT -> IO (Ptr CChar)) -> PJwtT -> IO ByteString
forall (m :: * -> *) b c a.
Monad m =>
(b -> m c) -> (a -> m b) -> a -> m c
<=< String -> IO (Ptr CChar) -> IO (Ptr CChar)
forall a. String -> IO (Ptr a) -> IO (Ptr a)
throwErrnoIfNull String
"jwt_encode_str"
(IO (Ptr CChar) -> IO (Ptr CChar))
-> (PJwtT -> IO (Ptr CChar)) -> PJwtT -> IO (Ptr CChar)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PJwtT -> IO (Ptr CChar)
c_jwt_encode_str
{-# RULES
"getGrant/unsafeGetGrant" forall s . getGrant (unpackCString# s) = unsafeGetGrant s
"getGrantBool/unsafeGetGrantBool" forall s . getGrantBool (unpackCString# s) = unsafeGetGrantBool s
"getGrantInt64/unsafeGetGrantInt64" forall s . getGrantInt64 (unpackCString# s) = unsafeGetGrantInt64 s
"getGrantInt/unsafeGetGrantInt" forall s . getGrantInt (unpackCString# s) = unsafeGetGrantInt s
"getGrantAsJson/unsafeGetGrantAsJson" forall s . getGrantAsJson (unpackCString# s) = unsafeGetGrantAsJson s
"getHeader/unsafeGetHeader" forall s . getHeader (unpackCString# s) = unsafeGetHeader s #-}
{-# INLINE [0] getGrant #-}
{-# INLINE [0] getGrantBool #-}
{-# INLINE [0] getGrantInt64 #-}
{-# INLINE [0] getGrantInt #-}
{-# INLINE [0] getGrantAsJson #-}
{-# INLINE [0] getHeader #-}
getGrant :: String -> JwtT -> JwtIO (Maybe ByteString)
getGrant :: String -> JwtT -> JwtIO (Maybe ByteString)
getGrant String
grant (JwtT ForeignPtr JwtT
pjwt_t) = IO (Maybe ByteString) -> JwtIO (Maybe ByteString)
forall a. IO a -> JwtIO a
JIO (IO (Maybe ByteString) -> JwtIO (Maybe ByteString))
-> IO (Maybe ByteString) -> JwtIO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT
-> (PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString))
-> (PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
String
-> (Ptr CChar -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a. String -> (Ptr CChar -> IO a) -> IO a
withCAString String
grant ((Ptr CChar -> IO (Maybe ByteString)) -> IO (Maybe ByteString))
-> (Ptr CChar -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ (Ptr CChar -> IO ByteString)
-> IO (Ptr CChar) -> IO (Maybe ByteString)
forall a b. (Ptr a -> IO b) -> IO (Ptr a) -> IO (Maybe b)
whenMaybeNotNull Ptr CChar -> IO ByteString
packCString (IO (Ptr CChar) -> IO (Maybe ByteString))
-> (Ptr CChar -> IO (Ptr CChar))
-> Ptr CChar
-> IO (Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PJwtT -> Ptr CChar -> IO (Ptr CChar)
c_jwt_get_grant PJwtT
jwt
unsafeGetGrant :: Addr# -> JwtT -> JwtIO (Maybe ByteString)
unsafeGetGrant :: Addr# -> JwtT -> JwtIO (Maybe ByteString)
unsafeGetGrant Addr#
p_grant (JwtT ForeignPtr JwtT
pjwt_t) = IO (Maybe ByteString) -> JwtIO (Maybe ByteString)
forall a. IO a -> JwtIO a
JIO (IO (Maybe ByteString) -> JwtIO (Maybe ByteString))
-> IO (Maybe ByteString) -> JwtIO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT
-> (PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString))
-> (PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
(Ptr CChar -> IO ByteString)
-> IO (Ptr CChar) -> IO (Maybe ByteString)
forall a b. (Ptr a -> IO b) -> IO (Ptr a) -> IO (Maybe b)
whenMaybeNotNull Ptr CChar -> IO ByteString
packCString (IO (Ptr CChar) -> IO (Maybe ByteString))
-> IO (Ptr CChar) -> IO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ PJwtT -> Ptr CChar -> IO (Ptr CChar)
c_jwt_get_grant PJwtT
jwt (Ptr CChar -> IO (Ptr CChar)) -> Ptr CChar -> IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ Addr# -> Ptr CChar
forall a. Addr# -> Ptr a
Ptr Addr#
p_grant
getGrantBool :: String -> JwtT -> JwtIO (Maybe Bool)
getGrantBool :: String -> JwtT -> JwtIO (Maybe Bool)
getGrantBool String
grant (JwtT ForeignPtr JwtT
pjwt_t) = IO (Maybe Bool) -> JwtIO (Maybe Bool)
forall a. IO a -> JwtIO a
JIO (IO (Maybe Bool) -> JwtIO (Maybe Bool))
-> IO (Maybe Bool) -> JwtIO (Maybe Bool)
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT -> (PJwtT -> IO (Maybe Bool)) -> IO (Maybe Bool)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO (Maybe Bool)) -> IO (Maybe Bool))
-> (PJwtT -> IO (Maybe Bool)) -> IO (Maybe Bool)
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
String -> (Ptr CChar -> IO (Maybe Bool)) -> IO (Maybe Bool)
forall a. String -> (Ptr CChar -> IO a) -> IO a
withCAString String
grant
((Ptr CChar -> IO (Maybe Bool)) -> IO (Maybe Bool))
-> (Ptr CChar -> IO (Maybe Bool)) -> IO (Maybe Bool)
forall a b. (a -> b) -> a -> b
$ String -> IO Bool -> IO (Maybe Bool)
forall a. String -> IO a -> IO (Maybe a)
throwErrnoOrNoEnt String
"jwt_get_grant_bool"
(IO Bool -> IO (Maybe Bool))
-> (Ptr CChar -> IO Bool) -> Ptr CChar -> IO (Maybe Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (CInt -> Bool) -> IO CInt -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Bool
forall a. (Eq a, Num a) => a -> Bool
toBool
(IO CInt -> IO Bool)
-> (Ptr CChar -> IO CInt) -> Ptr CChar -> IO Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PJwtT -> Ptr CChar -> IO CInt
c_jwt_get_grant_bool PJwtT
jwt
unsafeGetGrantBool :: Addr# -> JwtT -> JwtIO (Maybe Bool)
unsafeGetGrantBool :: Addr# -> JwtT -> JwtIO (Maybe Bool)
unsafeGetGrantBool Addr#
p_grant (JwtT ForeignPtr JwtT
pjwt_t) =
IO (Maybe Bool) -> JwtIO (Maybe Bool)
forall a. IO a -> JwtIO a
JIO (IO (Maybe Bool) -> JwtIO (Maybe Bool))
-> IO (Maybe Bool) -> JwtIO (Maybe Bool)
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT -> (PJwtT -> IO (Maybe Bool)) -> IO (Maybe Bool)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO (Maybe Bool)) -> IO (Maybe Bool))
-> (PJwtT -> IO (Maybe Bool)) -> IO (Maybe Bool)
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
String -> IO Bool -> IO (Maybe Bool)
forall a. String -> IO a -> IO (Maybe a)
throwErrnoOrNoEnt String
"jwt_get_grant_bool"
(IO Bool -> IO (Maybe Bool))
-> (Ptr CChar -> IO Bool) -> Ptr CChar -> IO (Maybe Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (CInt -> Bool) -> IO CInt -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Bool
forall a. (Eq a, Num a) => a -> Bool
toBool
(IO CInt -> IO Bool)
-> (Ptr CChar -> IO CInt) -> Ptr CChar -> IO Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PJwtT -> Ptr CChar -> IO CInt
c_jwt_get_grant_bool PJwtT
jwt
(Ptr CChar -> IO (Maybe Bool)) -> Ptr CChar -> IO (Maybe Bool)
forall a b. (a -> b) -> a -> b
$ Addr# -> Ptr CChar
forall a. Addr# -> Ptr a
Ptr Addr#
p_grant
getGrantInt64 :: String -> JwtT -> JwtIO (Maybe Int64)
getGrantInt64 :: String -> JwtT -> JwtIO (Maybe Int64)
getGrantInt64 String
grant (JwtT ForeignPtr JwtT
pjwt_t) = IO (Maybe Int64) -> JwtIO (Maybe Int64)
forall a. IO a -> JwtIO a
JIO (IO (Maybe Int64) -> JwtIO (Maybe Int64))
-> IO (Maybe Int64) -> JwtIO (Maybe Int64)
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT -> (PJwtT -> IO (Maybe Int64)) -> IO (Maybe Int64)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO (Maybe Int64)) -> IO (Maybe Int64))
-> (PJwtT -> IO (Maybe Int64)) -> IO (Maybe Int64)
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
String -> (Ptr CChar -> IO (Maybe Int64)) -> IO (Maybe Int64)
forall a. String -> (Ptr CChar -> IO a) -> IO a
withCAString String
grant
((Ptr CChar -> IO (Maybe Int64)) -> IO (Maybe Int64))
-> (Ptr CChar -> IO (Maybe Int64)) -> IO (Maybe Int64)
forall a b. (a -> b) -> a -> b
$ IO (Maybe CLong) -> IO (Maybe Int64)
coerce
(IO (Maybe CLong) -> IO (Maybe Int64))
-> (Ptr CChar -> IO (Maybe CLong)) -> Ptr CChar -> IO (Maybe Int64)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO CLong -> IO (Maybe CLong)
forall a. String -> IO a -> IO (Maybe a)
throwErrnoOrNoEnt String
"jwt_get_grant_int"
(IO CLong -> IO (Maybe CLong))
-> (Ptr CChar -> IO CLong) -> Ptr CChar -> IO (Maybe CLong)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PJwtT -> Ptr CChar -> IO CLong
c_jwt_get_grant_int PJwtT
jwt
unsafeGetGrantInt64 :: Addr# -> JwtT -> JwtIO (Maybe Int64)
unsafeGetGrantInt64 :: Addr# -> JwtT -> JwtIO (Maybe Int64)
unsafeGetGrantInt64 Addr#
p_grant (JwtT ForeignPtr JwtT
pjwt_t) =
IO (Maybe Int64) -> JwtIO (Maybe Int64)
forall a. IO a -> JwtIO a
JIO (IO (Maybe Int64) -> JwtIO (Maybe Int64))
-> IO (Maybe Int64) -> JwtIO (Maybe Int64)
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT -> (PJwtT -> IO (Maybe Int64)) -> IO (Maybe Int64)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO (Maybe Int64)) -> IO (Maybe Int64))
-> (PJwtT -> IO (Maybe Int64)) -> IO (Maybe Int64)
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
IO (Maybe CLong) -> IO (Maybe Int64)
coerce
(IO (Maybe CLong) -> IO (Maybe Int64))
-> (Ptr CChar -> IO (Maybe CLong)) -> Ptr CChar -> IO (Maybe Int64)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO CLong -> IO (Maybe CLong)
forall a. String -> IO a -> IO (Maybe a)
throwErrnoOrNoEnt String
"jwt_get_grant_int"
(IO CLong -> IO (Maybe CLong))
-> (Ptr CChar -> IO CLong) -> Ptr CChar -> IO (Maybe CLong)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PJwtT -> Ptr CChar -> IO CLong
c_jwt_get_grant_int PJwtT
jwt
(Ptr CChar -> IO (Maybe Int64)) -> Ptr CChar -> IO (Maybe Int64)
forall a b. (a -> b) -> a -> b
$ Addr# -> Ptr CChar
forall a. Addr# -> Ptr a
Ptr Addr#
p_grant
getGrantInt :: String -> JwtT -> JwtIO (Maybe Int)
getGrantInt :: String -> JwtT -> JwtIO (Maybe Int)
getGrantInt String
grant (JwtT ForeignPtr JwtT
pjwt_t) = IO (Maybe Int) -> JwtIO (Maybe Int)
forall a. IO a -> JwtIO a
JIO (IO (Maybe Int) -> JwtIO (Maybe Int))
-> IO (Maybe Int) -> JwtIO (Maybe Int)
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT -> (PJwtT -> IO (Maybe Int)) -> IO (Maybe Int)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO (Maybe Int)) -> IO (Maybe Int))
-> (PJwtT -> IO (Maybe Int)) -> IO (Maybe Int)
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
String -> (Ptr CChar -> IO (Maybe Int)) -> IO (Maybe Int)
forall a. String -> (Ptr CChar -> IO a) -> IO a
withCAString String
grant
((Ptr CChar -> IO (Maybe Int)) -> IO (Maybe Int))
-> (Ptr CChar -> IO (Maybe Int)) -> IO (Maybe Int)
forall a b. (a -> b) -> a -> b
$ String -> IO Int -> IO (Maybe Int)
forall a. String -> IO a -> IO (Maybe a)
throwErrnoOrNoEnt String
"jwt_get_grant_int"
(IO Int -> IO (Maybe Int))
-> (Ptr CChar -> IO Int) -> Ptr CChar -> IO (Maybe Int)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (CLong -> Int) -> IO CLong -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (CLong -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral :: CLong -> Int)
(IO CLong -> IO Int)
-> (Ptr CChar -> IO CLong) -> Ptr CChar -> IO Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PJwtT -> Ptr CChar -> IO CLong
c_jwt_get_grant_int PJwtT
jwt
unsafeGetGrantInt :: Addr# -> JwtT -> JwtIO (Maybe Int)
unsafeGetGrantInt :: Addr# -> JwtT -> JwtIO (Maybe Int)
unsafeGetGrantInt Addr#
p_grant (JwtT ForeignPtr JwtT
pjwt_t) =
IO (Maybe Int) -> JwtIO (Maybe Int)
forall a. IO a -> JwtIO a
JIO (IO (Maybe Int) -> JwtIO (Maybe Int))
-> IO (Maybe Int) -> JwtIO (Maybe Int)
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT -> (PJwtT -> IO (Maybe Int)) -> IO (Maybe Int)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO (Maybe Int)) -> IO (Maybe Int))
-> (PJwtT -> IO (Maybe Int)) -> IO (Maybe Int)
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
String -> IO Int -> IO (Maybe Int)
forall a. String -> IO a -> IO (Maybe a)
throwErrnoOrNoEnt String
"jwt_get_grant_int"
(IO Int -> IO (Maybe Int))
-> (Ptr CChar -> IO Int) -> Ptr CChar -> IO (Maybe Int)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (CLong -> Int) -> IO CLong -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (CLong -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral :: CLong -> Int)
(IO CLong -> IO Int)
-> (Ptr CChar -> IO CLong) -> Ptr CChar -> IO Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PJwtT -> Ptr CChar -> IO CLong
c_jwt_get_grant_int PJwtT
jwt
(Ptr CChar -> IO (Maybe Int)) -> Ptr CChar -> IO (Maybe Int)
forall a b. (a -> b) -> a -> b
$ Addr# -> Ptr CChar
forall a. Addr# -> Ptr a
Ptr Addr#
p_grant
getGrantAsJson :: String -> JwtT -> JwtIO (Maybe ByteString)
getGrantAsJson :: String -> JwtT -> JwtIO (Maybe ByteString)
getGrantAsJson String
grant (JwtT ForeignPtr JwtT
pjwt_t) = IO (Maybe ByteString) -> JwtIO (Maybe ByteString)
forall a. IO a -> JwtIO a
JIO (IO (Maybe ByteString) -> JwtIO (Maybe ByteString))
-> IO (Maybe ByteString) -> JwtIO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT
-> (PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString))
-> (PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
String
-> (Ptr CChar -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a. String -> (Ptr CChar -> IO a) -> IO a
withCAString String
grant
((Ptr CChar -> IO (Maybe ByteString)) -> IO (Maybe ByteString))
-> (Ptr CChar -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ (Ptr CChar -> IO ByteString)
-> IO (Ptr CChar) -> IO (Maybe ByteString)
forall a b. (Ptr a -> IO b) -> IO (Ptr a) -> IO (Maybe b)
whenMaybeNotNull Ptr CChar -> IO ByteString
unsafePackMallocCString
(IO (Ptr CChar) -> IO (Maybe ByteString))
-> (Ptr CChar -> IO (Ptr CChar))
-> Ptr CChar
-> IO (Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PJwtT -> Ptr CChar -> IO (Ptr CChar)
c_jwt_get_grants_json PJwtT
jwt
unsafeGetGrantAsJson :: Addr# -> JwtT -> JwtIO (Maybe ByteString)
unsafeGetGrantAsJson :: Addr# -> JwtT -> JwtIO (Maybe ByteString)
unsafeGetGrantAsJson Addr#
p_grant (JwtT ForeignPtr JwtT
pjwt_t) =
IO (Maybe ByteString) -> JwtIO (Maybe ByteString)
forall a. IO a -> JwtIO a
JIO (IO (Maybe ByteString) -> JwtIO (Maybe ByteString))
-> IO (Maybe ByteString) -> JwtIO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT
-> (PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString))
-> (PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt -> do
Ptr CChar
val <- PJwtT -> Ptr CChar -> IO (Ptr CChar)
c_jwt_get_grants_json PJwtT
jwt (Ptr CChar -> IO (Ptr CChar)) -> Ptr CChar -> IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ Addr# -> Ptr CChar
forall a. Addr# -> Ptr a
Ptr Addr#
p_grant
Bool -> IO ByteString -> IO (Maybe ByteString)
forall (m :: * -> *) a. Applicative m => Bool -> m a -> m (Maybe a)
whenMaybe (Ptr CChar
val Ptr CChar -> Ptr CChar -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr CChar
forall a. Ptr a
nullPtr) (IO ByteString -> IO (Maybe ByteString))
-> IO ByteString -> IO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> IO ByteString
unsafePackMallocCString Ptr CChar
val
jwtGetAlg :: JwtT -> JwtIO JwtAlgT
jwtGetAlg :: JwtT -> JwtIO JwtAlgT
jwtGetAlg (JwtT ForeignPtr JwtT
pjwt_t) = IO JwtAlgT -> JwtIO JwtAlgT
forall a. IO a -> JwtIO a
JIO (IO JwtAlgT -> JwtIO JwtAlgT) -> IO JwtAlgT -> JwtIO JwtAlgT
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT -> (PJwtT -> IO JwtAlgT) -> IO JwtAlgT
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t PJwtT -> IO JwtAlgT
c_jwt_get_alg
getHeader :: String -> JwtT -> JwtIO (Maybe ByteString)
String
h (JwtT ForeignPtr JwtT
pjwt_t) = IO (Maybe ByteString) -> JwtIO (Maybe ByteString)
forall a. IO a -> JwtIO a
JIO (IO (Maybe ByteString) -> JwtIO (Maybe ByteString))
-> IO (Maybe ByteString) -> JwtIO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT
-> (PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString))
-> (PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
String
-> (Ptr CChar -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a. String -> (Ptr CChar -> IO a) -> IO a
withCAString String
h ((Ptr CChar -> IO (Maybe ByteString)) -> IO (Maybe ByteString))
-> (Ptr CChar -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ (Ptr CChar -> IO ByteString)
-> IO (Ptr CChar) -> IO (Maybe ByteString)
forall a b. (Ptr a -> IO b) -> IO (Ptr a) -> IO (Maybe b)
whenMaybeNotNull Ptr CChar -> IO ByteString
packCString (IO (Ptr CChar) -> IO (Maybe ByteString))
-> (Ptr CChar -> IO (Ptr CChar))
-> Ptr CChar
-> IO (Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PJwtT -> Ptr CChar -> IO (Ptr CChar)
c_jwt_get_header PJwtT
jwt
unsafeGetHeader :: Addr# -> JwtT -> JwtIO (Maybe ByteString)
Addr#
p_header (JwtT ForeignPtr JwtT
pjwt_t) = IO (Maybe ByteString) -> JwtIO (Maybe ByteString)
forall a. IO a -> JwtIO a
JIO (IO (Maybe ByteString) -> JwtIO (Maybe ByteString))
-> IO (Maybe ByteString) -> JwtIO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ ForeignPtr JwtT
-> (PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr JwtT
pjwt_t ((PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString))
-> (PJwtT -> IO (Maybe ByteString)) -> IO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ \PJwtT
jwt ->
(Ptr CChar -> IO ByteString)
-> IO (Ptr CChar) -> IO (Maybe ByteString)
forall a b. (Ptr a -> IO b) -> IO (Ptr a) -> IO (Maybe b)
whenMaybeNotNull Ptr CChar -> IO ByteString
packCString (IO (Ptr CChar) -> IO (Maybe ByteString))
-> IO (Ptr CChar) -> IO (Maybe ByteString)
forall a b. (a -> b) -> a -> b
$ PJwtT -> Ptr CChar -> IO (Ptr CChar)
c_jwt_get_header PJwtT
jwt (Ptr CChar -> IO (Ptr CChar)) -> Ptr CChar -> IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ Addr# -> Ptr CChar
forall a. Addr# -> Ptr a
Ptr Addr#
p_header
foreign import ccall unsafe "jwt.h jwt_new" c_jwt_new :: Ptr PJwtT -> IO CInt
foreign import ccall unsafe "jwt.h &jwt_free" p_jwt_free :: FunPtr (PJwtT -> IO ())
foreign import ccall unsafe "jwt.h jwt_add_grant" c_jwt_add_grant :: PJwtT -> CString -> CString -> IO CInt
foreign import ccall unsafe "jwt.h jwt_add_grant_bool" c_jwt_add_grant_bool :: PJwtT -> CString -> CInt -> IO CInt
foreign import ccall unsafe "jwt.h jwt_add_grant_int" c_jwt_add_grant_int :: PJwtT -> CString -> CLong -> IO CInt
foreign import ccall unsafe "jwt.h jwt_add_grants_json" c_jwt_add_grants_json :: PJwtT -> CString -> IO CInt
foreign import ccall unsafe "jwt.h jwt_get_grant" c_jwt_get_grant :: PJwtT -> CString -> IO CString
foreign import ccall unsafe "jwt.h jwt_get_grant_bool" c_jwt_get_grant_bool :: PJwtT -> CString -> IO CInt
foreign import ccall unsafe "jwt.h jwt_get_grant_int" c_jwt_get_grant_int :: PJwtT -> CString -> IO CLong
foreign import ccall unsafe "jwt.h jwt_get_grants_json" c_jwt_get_grants_json :: PJwtT -> CString -> IO CString
foreign import ccall unsafe "jwt.h jwt_set_alg" c_jwt_set_alg :: PJwtT -> JwtAlgT -> CString -> CInt -> IO CInt
foreign import ccall unsafe "jwt.h jwt_add_header" :: PJwtT -> CString -> CString -> IO CInt
foreign import ccall unsafe "jwt.h jwt_encode_str" c_jwt_encode_str :: PJwtT -> IO CString
foreign import ccall unsafe "jwt.h jwt_get_alg" c_jwt_get_alg :: PJwtT -> IO JwtAlgT
foreign import ccall unsafe "jwt.h jwt_get_header" :: PJwtT -> CString -> IO CString
foreign import ccall unsafe "jwt.h jwt_decode" c_jwt_decode :: Ptr PJwtT -> CString -> CString -> CInt -> IO CInt
type PJsmnTokT = Ptr JsmnTokT
data JsonToken = JsStr ByteString
| JsNum ByteString
| JsTrue
| JsFalse
| JsNull
| JsArray [JsonToken]
| JsBlob ByteString
foldrJson :: (JsonToken -> b -> b) -> b -> CString -> PJsmnTokT -> Int -> IO b
foldrJson :: (JsonToken -> b -> b) -> b -> Ptr CChar -> PJsmnTokT -> Int -> IO b
foldrJson JsonToken -> b -> b
f b
z Ptr CChar
p_js PJsmnTokT
ptokens Int
count = StateT Int IO b -> Int -> IO b
forall (m :: * -> *) s a. Monad m => StateT s m a -> s -> m a
evalStateT ((JsonToken -> b -> b) -> b -> Int -> StateT Int IO b
forall a. (JsonToken -> a -> a) -> a -> Int -> StateT Int IO a
go JsonToken -> b -> b
f b
z Int
count) Int
0
where
peekToken :: StateT Int IO JsmnTokT
peekToken = StateT Int IO Int
forall (m :: * -> *) s. Monad m => StateT s m s
get StateT Int IO Int
-> (Int -> StateT Int IO JsmnTokT) -> StateT Int IO JsmnTokT
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= IO JsmnTokT -> StateT Int IO JsmnTokT
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO JsmnTokT -> StateT Int IO JsmnTokT)
-> (Int -> IO JsmnTokT) -> Int -> StateT Int IO JsmnTokT
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PJsmnTokT -> Int -> IO JsmnTokT
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff PJsmnTokT
ptokens
offsetPlus1 :: StateT Int m a -> StateT Int m a
offsetPlus1 = (Int -> Int) -> StateT Int m a -> StateT Int m a
forall s (m :: * -> *) a. (s -> s) -> StateT s m a -> StateT s m a
withStateT (Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1)
go :: (JsonToken -> a -> a) -> a -> Int -> StateT Int IO a
go :: (JsonToken -> a -> a) -> a -> Int -> StateT Int IO a
go JsonToken -> a -> a
k a
a Int
n
| Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 = a -> StateT Int IO a
forall (m :: * -> *) a. Monad m => a -> m a
return a
a
| Bool
otherwise = do
JsmnTokT
tok <- StateT Int IO JsmnTokT
peekToken
case JsmnTokT -> JsmnTypeT
jsmnType JsmnTokT
tok of
JsmnTypeT
ttok
| JsmnTypeT
ttok JsmnTypeT -> JsmnTypeT -> Bool
forall a. Eq a => a -> a -> Bool
== JsmnTypeT
jsmnString
-> JsonToken -> a -> a
k (JsonToken -> a -> a)
-> (ByteString -> JsonToken) -> ByteString -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> JsonToken
JsStr (ByteString -> a -> a)
-> StateT Int IO ByteString -> StateT Int IO (a -> a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO ByteString -> StateT Int IO ByteString
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (JsmnTokT -> IO ByteString
pack JsmnTokT
tok) StateT Int IO (a -> a) -> StateT Int IO a -> StateT Int IO a
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> StateT Int IO a -> StateT Int IO a
forall (m :: * -> *) a. StateT Int m a -> StateT Int m a
offsetPlus1 ((JsonToken -> a -> a) -> a -> Int -> StateT Int IO a
forall a. (JsonToken -> a -> a) -> a -> Int -> StateT Int IO a
go JsonToken -> a -> a
k a
a (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1))
| JsmnTypeT
ttok JsmnTypeT -> JsmnTypeT -> Bool
forall a. Eq a => a -> a -> Bool
== JsmnTypeT
jsmnPrimitive
-> JsonToken -> a -> a
k (JsonToken -> a -> a)
-> StateT Int IO JsonToken -> StateT Int IO (a -> a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO JsonToken -> StateT Int IO JsonToken
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (JsmnTokT -> IO JsonToken
mkPrimToken JsmnTokT
tok) StateT Int IO (a -> a) -> StateT Int IO a -> StateT Int IO a
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> StateT Int IO a -> StateT Int IO a
forall (m :: * -> *) a. StateT Int m a -> StateT Int m a
offsetPlus1 ((JsonToken -> a -> a) -> a -> Int -> StateT Int IO a
forall a. (JsonToken -> a -> a) -> a -> Int -> StateT Int IO a
go JsonToken -> a -> a
k a
a (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1))
| JsmnTypeT
ttok JsmnTypeT -> JsmnTypeT -> Bool
forall a. Eq a => a -> a -> Bool
== JsmnTypeT
jsmnArray
-> let len :: Int
len = CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> Int) -> CInt -> Int
forall a b. (a -> b) -> a -> b
$ JsmnTokT -> CInt
size JsmnTokT
tok
in JsonToken -> a -> a
k (JsonToken -> a -> a)
-> ([JsonToken] -> JsonToken) -> [JsonToken] -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [JsonToken] -> JsonToken
JsArray ([JsonToken] -> a -> a)
-> StateT Int IO [JsonToken] -> StateT Int IO (a -> a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StateT Int IO [JsonToken] -> StateT Int IO [JsonToken]
forall (m :: * -> *) a. StateT Int m a -> StateT Int m a
offsetPlus1 ((JsonToken -> [JsonToken] -> [JsonToken])
-> [JsonToken] -> Int -> StateT Int IO [JsonToken]
forall a. (JsonToken -> a -> a) -> a -> Int -> StateT Int IO a
go (:) [] Int
len) StateT Int IO (a -> a) -> StateT Int IO a -> StateT Int IO a
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JsonToken -> a -> a) -> a -> Int -> StateT Int IO a
forall a. (JsonToken -> a -> a) -> a -> Int -> StateT Int IO a
go JsonToken -> a -> a
k a
a (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
| Bool
otherwise
-> let supertok :: CInt
supertok = JsmnTokT -> CInt
parent JsmnTokT
tok
in do
Int
j <- StateT Int IO Int
forall (m :: * -> *) s. Monad m => StateT s m s
get StateT Int IO Int
-> (Int -> StateT Int IO Int) -> StateT Int IO Int
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= IO Int -> StateT Int IO Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Int -> StateT Int IO Int)
-> (Int -> IO Int) -> Int -> StateT Int IO Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Int -> IO Int
nextSibling CInt
supertok (Int -> IO Int) -> (Int -> Int) -> Int -> IO Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1)
Int -> StateT Int IO ()
forall (m :: * -> *) s. Monad m => s -> StateT s m ()
put Int
j
JsonToken -> a -> a
k (JsonToken -> a -> a)
-> (ByteString -> JsonToken) -> ByteString -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> JsonToken
JsBlob (ByteString -> a -> a)
-> StateT Int IO ByteString -> StateT Int IO (a -> a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO ByteString -> StateT Int IO ByteString
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (JsmnTokT -> IO ByteString
pack JsmnTokT
tok) StateT Int IO (a -> a) -> StateT Int IO a -> StateT Int IO a
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JsonToken -> a -> a) -> a -> Int -> StateT Int IO a
forall a. (JsonToken -> a -> a) -> a -> Int -> StateT Int IO a
go JsonToken -> a -> a
k a
a (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
mkPrimToken :: JsmnTokT -> IO JsonToken
mkPrimToken JsmnTokT
tok = do
CChar
c <- Ptr CChar -> Int -> IO CChar
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr CChar
p_js (Int -> IO CChar) -> Int -> IO CChar
forall a b. (a -> b) -> a -> b
$ CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> Int) -> CInt -> Int
forall a b. (a -> b) -> a -> b
$ JsmnTokT -> CInt
start JsmnTokT
tok
case (CChar
c :: CChar) of
CChar
116 -> JsonToken -> IO JsonToken
forall (m :: * -> *) a. Monad m => a -> m a
return JsonToken
JsTrue
CChar
110 -> JsonToken -> IO JsonToken
forall (m :: * -> *) a. Monad m => a -> m a
return JsonToken
JsNull
CChar
102 -> JsonToken -> IO JsonToken
forall (m :: * -> *) a. Monad m => a -> m a
return JsonToken
JsFalse
CChar
_ -> ByteString -> JsonToken
JsNum (ByteString -> JsonToken) -> IO ByteString -> IO JsonToken
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> JsmnTokT -> IO ByteString
pack JsmnTokT
tok
pack :: JsmnTokT -> IO ByteString
pack JsmnTokT
tok =
let s :: CInt
s = JsmnTokT -> CInt
start JsmnTokT
tok
e :: CInt
e = JsmnTokT -> CInt
end JsmnTokT
tok
n :: CInt
n = CInt
e CInt -> CInt -> CInt
forall a. Num a => a -> a -> a
- CInt
s
in (Ptr CChar, Int) -> IO ByteString
packCStringLen (Ptr CChar
p_js Ptr CChar -> Int -> Ptr CChar
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral CInt
s, CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral CInt
n)
nextSibling :: CInt -> Int -> IO Int
nextSibling CInt
supertok = (Int -> IO (Either Int Int)) -> Int -> IO Int
forall (m :: * -> *) a b.
Monad m =>
(a -> m (Either a b)) -> a -> m b
loopM
(\Int
j -> do
let temp :: PJsmnTokT
temp = PJsmnTokT -> Int -> PJsmnTokT
forall a. Storable a => Ptr a -> Int -> Ptr a
advancePtr PJsmnTokT
ptokens Int
j
JsmnTypeT
t <- PJsmnTokT -> IO JsmnTypeT
peekType PJsmnTokT
temp
CInt
p <- PJsmnTokT -> IO CInt
peekParent PJsmnTokT
temp
Either Int Int -> IO (Either Int Int)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either Int Int -> IO (Either Int Int))
-> Either Int Int -> IO (Either Int Int)
forall a b. (a -> b) -> a -> b
$ if JsmnTypeT
t JsmnTypeT -> JsmnTypeT -> Bool
forall a. Eq a => a -> a -> Bool
== JsmnTypeT
jsmnUndefined Bool -> Bool -> Bool
|| CInt
p CInt -> CInt -> Bool
forall a. Eq a => a -> a -> Bool
== CInt
supertok
then Int -> Either Int Int
forall a b. b -> Either a b
Right Int
j
else Int -> Either Int Int
forall a b. a -> Either a b
Left (Int
j Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1)
)
unsafeUseTokenizedJsonArray
:: (CString -> Ptr JsmnTokT -> Int -> IO a) -> ByteString -> IO (Maybe a)
unsafeUseTokenizedJsonArray :: (Ptr CChar -> PJsmnTokT -> Int -> IO a)
-> ByteString -> IO (Maybe a)
unsafeUseTokenizedJsonArray Ptr CChar -> PJsmnTokT -> Int -> IO a
f ByteString
js =
ByteString -> ((Ptr CChar, Int) -> IO (Maybe a)) -> IO (Maybe a)
forall a. ByteString -> ((Ptr CChar, Int) -> IO a) -> IO a
unsafeUseAsCStringLen ByteString
js (((Ptr CChar, Int) -> IO (Maybe a)) -> IO (Maybe a))
-> ((Ptr CChar, Int) -> IO (Maybe a)) -> IO (Maybe a)
forall a b. (a -> b) -> a -> b
$ \(Ptr CChar
p_js, Int
jslen) -> (Ptr PJsmnTokT -> IO (Maybe a)) -> IO (Maybe a)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca ((Ptr PJsmnTokT -> IO (Maybe a)) -> IO (Maybe a))
-> (Ptr PJsmnTokT -> IO (Maybe a)) -> IO (Maybe a)
forall a b. (a -> b) -> a -> b
$ \Ptr PJsmnTokT
out -> do
CInt
r <- Ptr CChar -> CSize -> Ptr PJsmnTokT -> IO CInt
c_tokenize_json Ptr CChar
p_js (Int -> CSize
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
jslen) Ptr PJsmnTokT
out
if CInt
r CInt -> CInt -> Bool
forall a. Ord a => a -> a -> Bool
< CInt
0
then String -> Errno -> IO (Maybe a)
forall a. String -> Errno -> IO a
throwLibjwt String
"tokenize_json" (CInt -> Errno
Errno (CInt -> Errno) -> CInt -> Errno
forall a b. (a -> b) -> a -> b
$ CInt -> CInt
forall a. Num a => a -> a
negate CInt
r)
else do
PJsmnTokT
ptokens <- Ptr PJsmnTokT -> IO PJsmnTokT
forall a. Storable a => Ptr a -> IO a
peek Ptr PJsmnTokT
out
JsmnTokT
tok0 <- PJsmnTokT -> IO JsmnTokT
forall a. Storable a => Ptr a -> IO a
peek PJsmnTokT
ptokens
Maybe a
res <- Bool -> IO a -> IO (Maybe a)
forall (m :: * -> *) a. Applicative m => Bool -> m a -> m (Maybe a)
whenMaybe (JsmnTokT -> JsmnTypeT
jsmnType JsmnTokT
tok0 JsmnTypeT -> JsmnTypeT -> Bool
forall a. Eq a => a -> a -> Bool
== JsmnTypeT
jsmnArray)
(IO a -> IO (Maybe a)) -> IO a -> IO (Maybe a)
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> PJsmnTokT -> Int -> IO a
f Ptr CChar
p_js (PJsmnTokT -> Int -> PJsmnTokT
forall a. Storable a => Ptr a -> Int -> Ptr a
advancePtr PJsmnTokT
ptokens Int
1) (CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> Int) -> CInt -> Int
forall a b. (a -> b) -> a -> b
$ JsmnTokT -> CInt
size JsmnTokT
tok0)
PJsmnTokT -> IO ()
forall a. Ptr a -> IO ()
free PJsmnTokT
ptokens
Maybe a -> IO (Maybe a)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe a
res
unsafeMapTokenizedJsonArray
:: (JsonToken -> b) -> ByteString -> JwtIO (Maybe [b])
unsafeMapTokenizedJsonArray :: (JsonToken -> b) -> ByteString -> JwtIO (Maybe [b])
unsafeMapTokenizedJsonArray JsonToken -> b
f =
IO (Maybe [b]) -> JwtIO (Maybe [b])
forall a. IO a -> JwtIO a
JIO (IO (Maybe [b]) -> JwtIO (Maybe [b]))
-> (ByteString -> IO (Maybe [b]))
-> ByteString
-> JwtIO (Maybe [b])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Ptr CChar -> PJsmnTokT -> Int -> IO [b])
-> ByteString -> IO (Maybe [b])
forall a.
(Ptr CChar -> PJsmnTokT -> Int -> IO a)
-> ByteString -> IO (Maybe a)
unsafeUseTokenizedJsonArray ((JsonToken -> [b] -> [b])
-> [b] -> Ptr CChar -> PJsmnTokT -> Int -> IO [b]
forall b.
(JsonToken -> b -> b) -> b -> Ptr CChar -> PJsmnTokT -> Int -> IO b
foldrJson ((:) (b -> [b] -> [b]) -> (JsonToken -> b) -> JsonToken -> [b] -> [b]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JsonToken -> b
f) [])
foreign import ccall unsafe "tokenize_json" c_tokenize_json :: CString -> CSize -> Ptr PJsmnTokT -> IO CInt
wrapJwtPtr :: PJwtT -> IO JwtT
wrapJwtPtr :: PJwtT -> IO JwtT
wrapJwtPtr = IO (ForeignPtr JwtT) -> IO JwtT
coerce (IO (ForeignPtr JwtT) -> IO JwtT)
-> (PJwtT -> IO (ForeignPtr JwtT)) -> PJwtT -> IO JwtT
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FinalizerPtr JwtT -> PJwtT -> IO (ForeignPtr JwtT)
forall a. FinalizerPtr a -> Ptr a -> IO (ForeignPtr a)
newForeignPtr FinalizerPtr JwtT
p_jwt_free
throwIfNonZero_ :: String -> IO CInt -> IO ()
throwIfNonZero_ :: String -> IO CInt -> IO ()
throwIfNonZero_ String
loc IO CInt
f = do
CInt
res <- IO CInt
f
if CInt
res CInt -> CInt -> Bool
forall a. Eq a => a -> a -> Bool
== CInt
0 then () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return () else String -> Errno -> IO ()
forall a. String -> Errno -> IO a
throwLibjwt String
loc (Errno -> IO ()) -> Errno -> IO ()
forall a b. (a -> b) -> a -> b
$ CInt -> Errno
Errno CInt
res
whenMaybeNotNull :: (Ptr a -> IO b) -> IO (Ptr a) -> IO (Maybe b)
whenMaybeNotNull :: (Ptr a -> IO b) -> IO (Ptr a) -> IO (Maybe b)
whenMaybeNotNull Ptr a -> IO b
f IO (Ptr a)
io = do
Ptr a
res <- IO (Ptr a)
io
Bool -> IO b -> IO (Maybe b)
forall (m :: * -> *) a. Applicative m => Bool -> m a -> m (Maybe a)
whenMaybe (Ptr a
res Ptr a -> Ptr a -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr a
forall a. Ptr a
nullPtr) (IO b -> IO (Maybe b)) -> IO b -> IO (Maybe b)
forall a b. (a -> b) -> a -> b
$ Ptr a -> IO b
f Ptr a
res
throwLibjwt :: String -> Errno -> IO a
throwLibjwt :: String -> Errno -> IO a
throwLibjwt String
loc Errno
err = IOError -> IO a
forall e a. Exception e => e -> IO a
throwIO (IOError -> IO a) -> IOError -> IO a
forall a b. (a -> b) -> a -> b
$ String -> Errno -> Maybe Handle -> Maybe String -> IOError
errnoToIOError String
loc Errno
err Maybe Handle
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
throwErrnoOrNoEnt :: String -> IO a -> IO (Maybe a)
throwErrnoOrNoEnt :: String -> IO a -> IO (Maybe a)
throwErrnoOrNoEnt String
loc IO a
f = do
a
res <- IO a
f
Errno
err <- IO Errno
getErrno
if Errno
err Errno -> Errno -> Bool
forall a. Eq a => a -> a -> Bool
== Errno
eOK
then Maybe a -> IO (Maybe a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe a -> IO (Maybe a)) -> Maybe a -> IO (Maybe a)
forall a b. (a -> b) -> a -> b
$ a -> Maybe a
forall a. a -> Maybe a
Just a
res
else if Errno
err Errno -> Errno -> Bool
forall a. Eq a => a -> a -> Bool
== Errno
eNOENT Bool -> Bool -> Bool
|| Errno
err Errno -> Errno -> Bool
forall a. Eq a => a -> a -> Bool
== Errno
eINVAL
then Maybe a -> IO (Maybe a)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe a
forall a. Maybe a
Nothing
else String -> Errno -> IO (Maybe a)
forall a. String -> Errno -> IO a
throwLibjwt String
loc Errno
err