{-# LANGUAGE CApiFFI #-}
module OpenCascade.BRepBuilderAPI.MakeWire 
( MakeWire
, new 
, addEdge
, addWire
, addListOfShape
, wire
, isDone
, error
) where

import Prelude hiding (error)
import OpenCascade.BRepBuilderAPI.Types
import OpenCascade.BRepBuilderAPI.Internal.Destructors
import OpenCascade.Inheritance
import OpenCascade.Internal.Bool
import qualified OpenCascade.TopoDS as TopoDS
import qualified OpenCascade.TopoDS.Internal.Destructors as TopoDS.Destructors
import qualified OpenCascade.TopTools as TopTools
import OpenCascade.BRepBuilderAPI.WireError (WireError)
import Foreign.C
import Foreign.Ptr
import Data.Acquire 

-- new

foreign import capi unsafe "hs_BRepBuilderAPI_MakeWire.h hs_new_BRepBuilderAPI_MakeWire" rawNew :: IO (Ptr MakeWire)

new :: Acquire (Ptr MakeWire)
new :: Acquire (Ptr MakeWire)
new = IO (Ptr MakeWire)
-> (Ptr MakeWire -> IO ()) -> Acquire (Ptr MakeWire)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire IO (Ptr MakeWire)
rawNew Ptr MakeWire -> IO ()
deleteMakeWire

-- addEdge 

foreign import capi unsafe "hs_BRepBuilderAPI_MakeWire.h hs_BRepBuilderAPI_MakeWire_AddEdge" addEdge :: Ptr MakeWire -> Ptr TopoDS.Edge -> IO ()


-- addWire 

foreign import capi unsafe "hs_BRepBuilderAPI_MakeWire.h hs_BRepBuilderAPI_MakeWire_AddWire" addWire :: Ptr MakeWire -> Ptr TopoDS.Wire -> IO ()


-- addListOfShape

foreign import capi unsafe "hs_BRepBuilderAPI_MakeWire.h hs_BRepBuilderAPI_MakeWire_AddListOfShape" addListOfShape :: Ptr MakeWire -> Ptr TopTools.ListOfShape -> IO ()

-- wire
--
foreign import capi unsafe "hs_BRepBuilderAPI_MakeWire.h hs_BRepBuilderAPI_MakeWire_Wire" rawWire :: Ptr MakeWire -> IO (Ptr TopoDS.Wire)

wire :: Ptr MakeWire -> Acquire (Ptr TopoDS.Wire)
wire :: Ptr MakeWire -> Acquire (Ptr Wire)
wire Ptr MakeWire
builder = IO (Ptr Wire) -> (Ptr Wire -> IO ()) -> Acquire (Ptr Wire)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr MakeWire -> IO (Ptr Wire)
rawWire Ptr MakeWire
builder) (Ptr Shape -> IO ()
TopoDS.Destructors.deleteShape (Ptr Shape -> IO ())
-> (Ptr Wire -> Ptr Shape) -> Ptr Wire -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr Wire -> Ptr Shape
forall a b. SubTypeOf a b => Ptr b -> Ptr a
upcast)

-- isDone
--
foreign import capi unsafe "hs_BRepBuilderAPI_MakeWire.h hs_BRepBuilderAPI_MakeWire_IsDone" rawIsDone :: Ptr MakeWire -> IO (CBool)

isDone :: Ptr MakeWire -> IO Bool
isDone :: Ptr MakeWire -> IO Bool
isDone Ptr MakeWire
p = CBool -> Bool
cBoolToBool (CBool -> Bool) -> IO CBool -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr MakeWire -> IO CBool
rawIsDone Ptr MakeWire
p

-- error
--
foreign import capi unsafe "hs_BRepBuilderAPI_MakeWire.h hs_BRepBuilderAPI_MakeWire_Error" rawError :: Ptr MakeWire -> IO (CInt)

error :: Ptr MakeWire -> IO WireError 
error :: Ptr MakeWire -> IO WireError
error Ptr MakeWire
p = Int -> WireError
forall a. Enum a => Int -> a
toEnum (Int -> WireError) -> (CInt -> Int) -> CInt -> WireError
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> WireError) -> IO CInt -> IO WireError
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr MakeWire -> IO CInt
rawError Ptr MakeWire
p