{-# LANGUAGE CApiFFI #-}
module OpenCascade.STEPControl.Writer
( new
, setTolerance
, unsetTolerance
, transfer
, write
) where

import OpenCascade.STEPControl.Types (Writer)
import OpenCascade.STEPControl.Internal.Destructors (deleteWriter)
import qualified OpenCascade.TopoDS as TopoDS
import Foreign.C
import Foreign.Ptr
import Data.Acquire
import OpenCascade.Internal.Bool (boolToCBool)
import qualified OpenCascade.IFSelect.ReturnStatus as IFSelect.ReturnStatus
import OpenCascade.STEPControl.StepModelType (StepModelType)
import Data.Coerce (coerce)

foreign import capi unsafe "hs_STEPControl_Writer.h hs_new_STEPControl_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_STEPControl_Writer.h hs_STEPControl_Writer_setTolerance" rawSetTolerance :: Ptr Writer -> CDouble -> IO ()

setTolerance :: Ptr Writer -> Double -> IO ()
setTolerance :: Ptr Writer -> Double -> IO ()
setTolerance = (Ptr Writer -> CDouble -> IO ()) -> Ptr Writer -> Double -> IO ()
forall a b. Coercible a b => a -> b
coerce Ptr Writer -> CDouble -> IO ()
rawSetTolerance 

foreign import capi unsafe "hs_STEPControl_Writer.h hs_STEPControl_Writer_unsetTolerance" unsetTolerance :: Ptr Writer -> IO ()

foreign import capi unsafe "hs_STEPControl_Writer.h hs_STEPControl_Writer_transfer" rawTransfer :: Ptr Writer -> Ptr TopoDS.Shape -> CInt -> CBool -> IO CInt

transfer :: Ptr Writer -> Ptr TopoDS.Shape -> StepModelType -> Bool -> IO IFSelect.ReturnStatus.ReturnStatus
transfer :: Ptr Writer -> Ptr Shape -> StepModelType -> Bool -> IO ReturnStatus
transfer Ptr Writer
writer Ptr Shape
shape StepModelType
mode Bool
compgraph = Int -> ReturnStatus
forall a. Enum a => Int -> a
toEnum (Int -> ReturnStatus) -> (CInt -> Int) -> CInt -> ReturnStatus
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> ReturnStatus) -> IO CInt -> IO ReturnStatus
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr Writer -> Ptr Shape -> CInt -> CBool -> IO CInt
rawTransfer Ptr Writer
writer Ptr Shape
shape (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> (StepModelType -> Int) -> StepModelType -> CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. StepModelType -> Int
forall a. Enum a => a -> Int
fromEnum (StepModelType -> CInt) -> StepModelType -> CInt
forall a b. (a -> b) -> a -> b
$ StepModelType
mode) (Bool -> CBool
boolToCBool Bool
compgraph)

foreign import capi unsafe "hs_STEPControl_Writer.h hs_STEPControl_Writer_write" rawWrite :: Ptr Writer -> CString -> IO CInt

write :: Ptr Writer -> String -> IO IFSelect.ReturnStatus.ReturnStatus
write :: Ptr Writer -> String -> IO ReturnStatus
write Ptr Writer
writer String
filename = Int -> ReturnStatus
forall a. Enum a => Int -> a
toEnum (Int -> ReturnStatus) -> (CInt -> Int) -> CInt -> ReturnStatus
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> ReturnStatus) -> IO CInt -> IO ReturnStatus
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> (CString -> IO CInt) -> IO CInt
forall a. String -> (CString -> IO a) -> IO a
withCString String
filename (Ptr Writer -> CString -> IO CInt
rawWrite Ptr Writer
writer)