{-# LANGUAGE CApiFFI #-}
module OpenCascade.TDocStd.Document 
( Document
, fromStorageFormat
, main 
) where

import OpenCascade.TDocStd.Types (Document)
import OpenCascade.TDocStd.Internal.Destructors (deleteDocumentHandle)
import OpenCascade.TDF.Types (Label)
import OpenCascade.TDF.Internal.Destructors (deleteLabel)
import OpenCascade.Handle (Handle)
import Data.Acquire (Acquire, mkAcquire)
import Foreign.Ptr (Ptr)
import Foreign.C.String (CString, withCString)

foreign import capi unsafe "hs_TDocStd_Document.h hs_new_TDocStd_Document" rawNew :: CString -> IO (Ptr (Handle Document))

fromStorageFormat :: String -> Acquire (Ptr (Handle Document))
fromStorageFormat :: String -> Acquire (Ptr (Handle Document))
fromStorageFormat String
fmt = IO (Ptr (Handle Document))
-> (Ptr (Handle Document) -> IO ())
-> Acquire (Ptr (Handle Document))
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (String
-> (CString -> IO (Ptr (Handle Document)))
-> IO (Ptr (Handle Document))
forall a. String -> (CString -> IO a) -> IO a
withCString String
fmt CString -> IO (Ptr (Handle Document))
rawNew) Ptr (Handle Document) -> IO ()
deleteDocumentHandle

foreign import capi unsafe "hs_TDocStd_Document.h hs_TDocStd_Document_main" rawMain :: Ptr (Handle Document) -> IO (Ptr Label)

main :: Ptr (Handle Document) -> Acquire (Ptr Label)
main :: Ptr (Handle Document) -> Acquire (Ptr Label)
main Ptr (Handle Document)
doc = IO (Ptr Label) -> (Ptr Label -> IO ()) -> Acquire (Ptr Label)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle Document) -> IO (Ptr Label)
rawMain Ptr (Handle Document)
doc) Ptr Label -> IO ()
deleteLabel