module Obelisk.ExecutableConfig (get) where import Control.Exception (bracket) import qualified Data.ByteString as BS import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.Encoding as T import Foreign.C.String (withCString) import Foreign.Ptr (nullPtr) import System.FilePath.Posix (()) import Obelisk.ExecutableConfig.Internal.AssetManager get :: Text -> IO (Maybe Text) get name = bracket getAssets freeAssetManager $ \mgrObj -> do mgr <- assetManagerFromJava mgrObj let open = do a <- withCString ("config" T.unpack name) $ \fn -> assetManager_open mgr fn 3 return $ if unAAsset a == nullPtr then Nothing else Just a close = mapM_ asset_close bracket open close $ mapM $ \asset -> do b <- asset_getBuffer asset l <- asset_getLength asset fmap T.decodeUtf8 $ BS.packCStringLen (b, fromIntegral l)