{-# LANGUAGE CApiFFI #-}
module OpenCascade.StlAPI.Writer
( Writer
, new
, setAsciiMode
, write
) where

import OpenCascade.StlAPI.Types (Writer)
import OpenCascade.StlAPI.Internal.Destructors (deleteWriter)
import qualified OpenCascade.TopoDS as TopoDS
import Foreign.C
import Foreign.Ptr
import Data.Acquire
import OpenCascade.Internal.Bool (boolToCBool, cBoolToBool)

foreign import capi unsafe "hs_StlAPI_Writer.h hs_new_StlAPI_Writer" rawNew :: IO (Ptr Writer)

new :: Acquire (Ptr Writer)
new :: Acquire (Ptr Writer)
new = IO (Ptr Writer) -> (Ptr Writer -> IO ()) -> Acquire (Ptr Writer)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire IO (Ptr Writer)
rawNew Ptr Writer -> IO ()
deleteWriter

foreign import capi unsafe "hs_StlAPI_Writer.h hs_StlAPI_Writer_setAsciiMode" rawSetAsciiMode :: Ptr Writer -> CBool -> IO ()

setAsciiMode :: Ptr Writer -> Bool -> IO ()
setAsciiMode :: Ptr Writer -> Bool -> IO ()
setAsciiMode Ptr Writer
writer Bool
mode = Ptr Writer -> CBool -> IO ()
rawSetAsciiMode Ptr Writer
writer (Bool -> CBool
boolToCBool Bool
mode)


foreign import capi unsafe "hs_StlAPI_Writer.h hs_StlAPI_Writer_write" rawWrite :: Ptr Writer -> Ptr TopoDS.Shape -> CString -> IO (CBool)

write :: Ptr Writer -> Ptr TopoDS.Shape -> String -> IO (Bool)
write :: Ptr Writer -> Ptr Shape -> String -> IO Bool
write Ptr Writer
writer Ptr Shape
shape String
filename = CBool -> Bool
cBoolToBool (CBool -> Bool) -> IO CBool -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> (CString -> IO CBool) -> IO CBool
forall a. String -> (CString -> IO a) -> IO a
withCString String
filename (Ptr Writer -> Ptr Shape -> CString -> IO CBool
rawWrite Ptr Writer
writer Ptr Shape
shape)