packages feed

hs-bindgen-1.0.0.0: test-artefacts/fixtures/globals/untagged/Example.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE UndecidableInstances #-}

module Example
    ( Example.UntaggedPoint(..)
    , Example.UntaggedPair(..)
    , Example.UntaggedEnum(..)
    , pattern Example.VAL_A
    , pattern Example.VAL_B
    , Example.UntaggedEnumCoords(..)
    , pattern Example.X
    , pattern Example.Y
    , pattern Example.Z
    , Example.A(..)
    , pattern Example.A1
    , Example.B(..)
    , Example.C(..)
    )
  where

import qualified HsBindgen.Runtime.CEnum as CEnum
import qualified HsBindgen.Runtime.HasCField as HasCField
import qualified HsBindgen.Runtime.Marshal as Marshal
import qualified HsBindgen.Runtime.Struct as Struct
import qualified HsBindgen.Runtime.Support as BG
import qualified HsBindgen.Runtime.Support.CompatHasField as BG.CompatHasField
import qualified HsBindgen.Runtime.Union as Union
import Prelude ((<*>), (>>), Eq, Int, Ord, Read, Show, pure, type (~))

{-| __C declaration:__ @struct \@untaggedPoint@

    __defined at:__ @globals\/untagged.h 12:1@

    __exported by:__ @globals\/untagged.h@
-}
data UntaggedPoint = UntaggedPoint
  { untaggedPoint_x :: BG.CInt
    {- ^ __C declaration:__ @x@

         __defined at:__ @globals\/untagged.h 12:14@

         __exported by:__ @globals\/untagged.h@
    -}
  , untaggedPoint_y :: BG.CInt
    {- ^ __C declaration:__ @y@

         __defined at:__ @globals\/untagged.h 12:21@

         __exported by:__ @globals\/untagged.h@
    -}
  }
  deriving stock (Eq, BG.Generic, Show)

instance Marshal.StaticSize UntaggedPoint where

  staticSizeOf = \_ -> (8 :: Int)

  staticAlignment = \_ -> (4 :: Int)

instance Marshal.ReadRaw UntaggedPoint where

  readRaw =
    \ptr0 ->
          pure UntaggedPoint
      <*> HasCField.readRaw (BG.Proxy @"untaggedPoint_x") ptr0
      <*> HasCField.readRaw (BG.Proxy @"untaggedPoint_y") ptr0

instance Marshal.WriteRaw UntaggedPoint where

  writeRaw =
    \ptr0 ->
      \s1 ->
        case s1 of
          UntaggedPoint untaggedPoint_x2 untaggedPoint_y3 ->
               HasCField.writeRaw (BG.Proxy @"untaggedPoint_x") ptr0 untaggedPoint_x2
            >> HasCField.writeRaw (BG.Proxy @"untaggedPoint_y") ptr0 untaggedPoint_y3

deriving via Marshal.EquivStorable UntaggedPoint instance BG.Storable UntaggedPoint

deriving via Struct.IsStructViaReadRaw UntaggedPoint instance Struct.IsStruct UntaggedPoint

{-| __C declaration:__ @x@

    __defined at:__ @globals\/untagged.h 12:14@

    __exported by:__ @globals\/untagged.h@
-}
instance ( ty ~ BG.CInt
         ) => BG.CompatHasField.HasField "untaggedPoint_x" UntaggedPoint ty where

  hasField =
    \x0 ->
      ( \y1 ->
          UntaggedPoint {untaggedPoint_x = y1, untaggedPoint_y = BG.getField @"untaggedPoint_y" x0}
      , BG.getField @"untaggedPoint_x" x0
      )

instance ( ty ~ BG.CInt
         ) => BG.HasField "untaggedPoint_x" (BG.Ptr UntaggedPoint) (BG.Ptr ty) where

  getField =
    HasCField.fromPtr (BG.Proxy @"untaggedPoint_x")

instance HasCField.HasCField UntaggedPoint "untaggedPoint_x" where

  type CFieldType UntaggedPoint "untaggedPoint_x" =
    BG.CInt

  offset# = \_ -> \_ -> 0

{-| __C declaration:__ @y@

    __defined at:__ @globals\/untagged.h 12:21@

    __exported by:__ @globals\/untagged.h@
-}
instance ( ty ~ BG.CInt
         ) => BG.CompatHasField.HasField "untaggedPoint_y" UntaggedPoint ty where

  hasField =
    \x0 ->
      ( \y1 ->
          UntaggedPoint {untaggedPoint_y = y1, untaggedPoint_x = BG.getField @"untaggedPoint_x" x0}
      , BG.getField @"untaggedPoint_y" x0
      )

instance ( ty ~ BG.CInt
         ) => BG.HasField "untaggedPoint_y" (BG.Ptr UntaggedPoint) (BG.Ptr ty) where

  getField =
    HasCField.fromPtr (BG.Proxy @"untaggedPoint_y")

instance HasCField.HasCField UntaggedPoint "untaggedPoint_y" where

  type CFieldType UntaggedPoint "untaggedPoint_y" =
    BG.CInt

  offset# = \_ -> \_ -> 4

{-| __C declaration:__ @struct \@untaggedPair@

    __defined at:__ @globals\/untagged.h 14:1@

    __exported by:__ @globals\/untagged.h@
-}
data UntaggedPair = UntaggedPair
  { untaggedPair_a :: BG.CInt
    {- ^ __C declaration:__ @a@

         __defined at:__ @globals\/untagged.h 14:14@

         __exported by:__ @globals\/untagged.h@
    -}
  , untaggedPair_b :: BG.CInt
    {- ^ __C declaration:__ @b@

         __defined at:__ @globals\/untagged.h 14:21@

         __exported by:__ @globals\/untagged.h@
    -}
  }
  deriving stock (Eq, BG.Generic, Show)

instance Marshal.StaticSize UntaggedPair where

  staticSizeOf = \_ -> (8 :: Int)

  staticAlignment = \_ -> (4 :: Int)

instance Marshal.ReadRaw UntaggedPair where

  readRaw =
    \ptr0 ->
          pure UntaggedPair
      <*> HasCField.readRaw (BG.Proxy @"untaggedPair_a") ptr0
      <*> HasCField.readRaw (BG.Proxy @"untaggedPair_b") ptr0

instance Marshal.WriteRaw UntaggedPair where

  writeRaw =
    \ptr0 ->
      \s1 ->
        case s1 of
          UntaggedPair untaggedPair_a2 untaggedPair_b3 ->
               HasCField.writeRaw (BG.Proxy @"untaggedPair_a") ptr0 untaggedPair_a2
            >> HasCField.writeRaw (BG.Proxy @"untaggedPair_b") ptr0 untaggedPair_b3

deriving via Marshal.EquivStorable UntaggedPair instance BG.Storable UntaggedPair

deriving via Struct.IsStructViaReadRaw UntaggedPair instance Struct.IsStruct UntaggedPair

{-| __C declaration:__ @a@

    __defined at:__ @globals\/untagged.h 14:14@

    __exported by:__ @globals\/untagged.h@
-}
instance ( ty ~ BG.CInt
         ) => BG.CompatHasField.HasField "untaggedPair_a" UntaggedPair ty where

  hasField =
    \x0 ->
      ( \y1 ->
          UntaggedPair {untaggedPair_a = y1, untaggedPair_b = BG.getField @"untaggedPair_b" x0}
      , BG.getField @"untaggedPair_a" x0
      )

instance ( ty ~ BG.CInt
         ) => BG.HasField "untaggedPair_a" (BG.Ptr UntaggedPair) (BG.Ptr ty) where

  getField =
    HasCField.fromPtr (BG.Proxy @"untaggedPair_a")

instance HasCField.HasCField UntaggedPair "untaggedPair_a" where

  type CFieldType UntaggedPair "untaggedPair_a" =
    BG.CInt

  offset# = \_ -> \_ -> 0

{-| __C declaration:__ @b@

    __defined at:__ @globals\/untagged.h 14:21@

    __exported by:__ @globals\/untagged.h@
-}
instance ( ty ~ BG.CInt
         ) => BG.CompatHasField.HasField "untaggedPair_b" UntaggedPair ty where

  hasField =
    \x0 ->
      ( \y1 ->
          UntaggedPair {untaggedPair_b = y1, untaggedPair_a = BG.getField @"untaggedPair_a" x0}
      , BG.getField @"untaggedPair_b" x0
      )

instance ( ty ~ BG.CInt
         ) => BG.HasField "untaggedPair_b" (BG.Ptr UntaggedPair) (BG.Ptr ty) where

  getField =
    HasCField.fromPtr (BG.Proxy @"untaggedPair_b")

instance HasCField.HasCField UntaggedPair "untaggedPair_b" where

  type CFieldType UntaggedPair "untaggedPair_b" =
    BG.CInt

  offset# = \_ -> \_ -> 4

{-| __C declaration:__ @enum \@untaggedEnum@

    __defined at:__ @globals\/untagged.h 16:1@

    __exported by:__ @globals\/untagged.h@
-}
newtype UntaggedEnum = UntaggedEnum
  { unwrapUntaggedEnum :: BG.CUInt
  }
  deriving stock (Eq, BG.Generic, Ord)
  deriving newtype (BG.HasFFIType)

instance Marshal.StaticSize UntaggedEnum where

  staticSizeOf = \_ -> (4 :: Int)

  staticAlignment = \_ -> (4 :: Int)

instance Marshal.ReadRaw UntaggedEnum where

  readRaw =
    \ptr0 ->
          pure UntaggedEnum
      <*> Marshal.readRawByteOff ptr0 (0 :: Int)

instance Marshal.WriteRaw UntaggedEnum where

  writeRaw =
    \ptr0 ->
      \s1 ->
        case s1 of
          UntaggedEnum unwrapUntaggedEnum2 ->
            Marshal.writeRawByteOff ptr0 (0 :: Int) unwrapUntaggedEnum2

deriving via Marshal.EquivStorable UntaggedEnum instance BG.Storable UntaggedEnum

deriving via BG.CUInt instance BG.Prim UntaggedEnum

instance CEnum.CEnum UntaggedEnum where

  type CEnumZ UntaggedEnum = BG.CUInt

  toCEnum = UntaggedEnum

  fromCEnum = BG.getField @"unwrapUntaggedEnum"

  declaredValues =
    \_ ->
      CEnum.declaredValuesFromList [(0, BG.singleton "VAL_A"), (1, BG.singleton "VAL_B")]

  showsUndeclared =
    CEnum.showsWrappedUndeclared "UntaggedEnum"

  readPrecUndeclared =
    CEnum.readPrecWrappedUndeclared "UntaggedEnum"

  isDeclared = CEnum.seqIsDeclared

  mkDeclared = CEnum.seqMkDeclared

instance CEnum.SequentialCEnum UntaggedEnum where

  minDeclaredValue = VAL_A

  maxDeclaredValue = VAL_B

instance Show UntaggedEnum where

  showsPrec = CEnum.shows

instance Read UntaggedEnum where

  readPrec = CEnum.readPrec

  readList = BG.readListDefault

  readListPrec = BG.readListPrecDefault

instance ( ty ~ BG.CUInt
         ) => BG.CompatHasField.HasField "unwrapUntaggedEnum" UntaggedEnum ty where

  hasField =
    \x0 ->
      ( \y1 -> UntaggedEnum {unwrapUntaggedEnum = y1}
      , BG.getField @"unwrapUntaggedEnum" x0
      )

instance ( ty ~ BG.CUInt
         ) => BG.HasField "unwrapUntaggedEnum" (BG.Ptr UntaggedEnum) (BG.Ptr ty) where

  getField =
    HasCField.fromPtr (BG.Proxy @"unwrapUntaggedEnum")

instance HasCField.HasCField UntaggedEnum "unwrapUntaggedEnum" where

  type CFieldType UntaggedEnum "unwrapUntaggedEnum" =
    BG.CUInt

  offset# = \_ -> \_ -> 0

{-| __C declaration:__ @VAL_A@

    __defined at:__ @globals\/untagged.h 16:8@

    __exported by:__ @globals\/untagged.h@
-}
pattern VAL_A :: UntaggedEnum
pattern VAL_A = UntaggedEnum 0

{-| __C declaration:__ @VAL_B@

    __defined at:__ @globals\/untagged.h 16:19@

    __exported by:__ @globals\/untagged.h@
-}
pattern VAL_B :: UntaggedEnum
pattern VAL_B = UntaggedEnum 1

{-| __C declaration:__ @enum \@untaggedEnumCoords@

    __defined at:__ @globals\/untagged.h 18:1@

    __exported by:__ @globals\/untagged.h@
-}
newtype UntaggedEnumCoords = UntaggedEnumCoords
  { unwrapUntaggedEnumCoords :: BG.CUInt
  }
  deriving stock (Eq, BG.Generic, Ord)
  deriving newtype (BG.HasFFIType)

instance Marshal.StaticSize UntaggedEnumCoords where

  staticSizeOf = \_ -> (4 :: Int)

  staticAlignment = \_ -> (4 :: Int)

instance Marshal.ReadRaw UntaggedEnumCoords where

  readRaw =
    \ptr0 ->
          pure UntaggedEnumCoords
      <*> Marshal.readRawByteOff ptr0 (0 :: Int)

instance Marshal.WriteRaw UntaggedEnumCoords where

  writeRaw =
    \ptr0 ->
      \s1 ->
        case s1 of
          UntaggedEnumCoords unwrapUntaggedEnumCoords2 ->
            Marshal.writeRawByteOff ptr0 (0 :: Int) unwrapUntaggedEnumCoords2

deriving via Marshal.EquivStorable UntaggedEnumCoords instance BG.Storable UntaggedEnumCoords

deriving via BG.CUInt instance BG.Prim UntaggedEnumCoords

instance CEnum.CEnum UntaggedEnumCoords where

  type CEnumZ UntaggedEnumCoords = BG.CUInt

  toCEnum = UntaggedEnumCoords

  fromCEnum = BG.getField @"unwrapUntaggedEnumCoords"

  declaredValues =
    \_ ->
      CEnum.declaredValuesFromList [(10, BG.singleton "X"), (20, BG.singleton "Y"), (30, BG.singleton "Z")]

  showsUndeclared =
    CEnum.showsWrappedUndeclared "UntaggedEnumCoords"

  readPrecUndeclared =
    CEnum.readPrecWrappedUndeclared "UntaggedEnumCoords"

instance Show UntaggedEnumCoords where

  showsPrec = CEnum.shows

instance Read UntaggedEnumCoords where

  readPrec = CEnum.readPrec

  readList = BG.readListDefault

  readListPrec = BG.readListPrecDefault

instance ( ty ~ BG.CUInt
         ) => BG.CompatHasField.HasField "unwrapUntaggedEnumCoords" UntaggedEnumCoords ty where

  hasField =
    \x0 ->
      ( \y1 ->
          UntaggedEnumCoords {unwrapUntaggedEnumCoords = y1}
      , BG.getField @"unwrapUntaggedEnumCoords" x0
      )

instance ( ty ~ BG.CUInt
         ) => BG.HasField "unwrapUntaggedEnumCoords" (BG.Ptr UntaggedEnumCoords) (BG.Ptr ty) where

  getField =
    HasCField.fromPtr (BG.Proxy @"unwrapUntaggedEnumCoords")

instance HasCField.HasCField UntaggedEnumCoords "unwrapUntaggedEnumCoords" where

  type CFieldType UntaggedEnumCoords "unwrapUntaggedEnumCoords" =
    BG.CUInt

  offset# = \_ -> \_ -> 0

{-| __C declaration:__ @X@

    __defined at:__ @globals\/untagged.h 18:8@

    __exported by:__ @globals\/untagged.h@
-}
pattern X :: UntaggedEnumCoords
pattern X = UntaggedEnumCoords 10

{-| __C declaration:__ @Y@

    __defined at:__ @globals\/untagged.h 18:16@

    __exported by:__ @globals\/untagged.h@
-}
pattern Y :: UntaggedEnumCoords
pattern Y = UntaggedEnumCoords 20

{-| __C declaration:__ @Z@

    __defined at:__ @globals\/untagged.h 18:24@

    __exported by:__ @globals\/untagged.h@
-}
pattern Z :: UntaggedEnumCoords
pattern Z = UntaggedEnumCoords 30

{-| __C declaration:__ @enum \@A@

    __defined at:__ @globals\/untagged.h 24:1@

    __exported by:__ @globals\/untagged.h@
-}
newtype A = A
  { unwrapA :: BG.CUInt
  }
  deriving stock (Eq, BG.Generic, Ord)
  deriving newtype (BG.HasFFIType)

instance Marshal.StaticSize A where

  staticSizeOf = \_ -> (4 :: Int)

  staticAlignment = \_ -> (4 :: Int)

instance Marshal.ReadRaw A where

  readRaw =
    \ptr0 ->
          pure A
      <*> Marshal.readRawByteOff ptr0 (0 :: Int)

instance Marshal.WriteRaw A where

  writeRaw =
    \ptr0 ->
      \s1 ->
        case s1 of
          A unwrapA2 ->
            Marshal.writeRawByteOff ptr0 (0 :: Int) unwrapA2

deriving via Marshal.EquivStorable A instance BG.Storable A

deriving via BG.CUInt instance BG.Prim A

instance CEnum.CEnum A where

  type CEnumZ A = BG.CUInt

  toCEnum = A

  fromCEnum = BG.getField @"unwrapA"

  declaredValues =
    \_ ->
      CEnum.declaredValuesFromList [(0, BG.singleton "A1")]

  showsUndeclared = CEnum.showsWrappedUndeclared "A"

  readPrecUndeclared =
    CEnum.readPrecWrappedUndeclared "A"

  isDeclared = CEnum.seqIsDeclared

  mkDeclared = CEnum.seqMkDeclared

instance CEnum.SequentialCEnum A where

  minDeclaredValue = A1

  maxDeclaredValue = A1

instance Show A where

  showsPrec = CEnum.shows

instance Read A where

  readPrec = CEnum.readPrec

  readList = BG.readListDefault

  readListPrec = BG.readListPrecDefault

instance (ty ~ BG.CUInt) => BG.CompatHasField.HasField "unwrapA" A ty where

  hasField =
    \x0 ->
      (\y1 -> A {unwrapA = y1}, BG.getField @"unwrapA" x0)

instance (ty ~ BG.CUInt) => BG.HasField "unwrapA" (BG.Ptr A) (BG.Ptr ty) where

  getField = HasCField.fromPtr (BG.Proxy @"unwrapA")

instance HasCField.HasCField A "unwrapA" where

  type CFieldType A "unwrapA" = BG.CUInt

  offset# = \_ -> \_ -> 0

{-| __C declaration:__ @a1@

    __defined at:__ @globals\/untagged.h 24:8@

    __exported by:__ @globals\/untagged.h@
-}
pattern A1 :: A
pattern A1 = A 0

{-| __C declaration:__ @union \@B@

    __defined at:__ @globals\/untagged.h 27:7@

    __exported by:__ @globals\/untagged.h@
-}
newtype B = B
  { unwrapB :: BG.ByteArray
  }
  deriving stock (BG.Generic)

deriving via BG.SizedByteArray 4 4 instance Marshal.StaticSize B

deriving via BG.SizedByteArray 4 4 instance Marshal.ReadRaw B

deriving via BG.SizedByteArray 4 4 instance Marshal.WriteRaw B

deriving via Marshal.EquivStorable B instance BG.Storable B

deriving via BG.SizedByteArray 4 4 instance Union.IsUnion B

{-| __C declaration:__ @x@

    __defined at:__ @globals\/untagged.h 27:19@

    __exported by:__ @globals\/untagged.h@
-}
instance (ty ~ BG.CInt) => BG.HasField "b_x" B ty where

  getField = BG.getUnionPayload

{-| __C declaration:__ @x@

    __defined at:__ @globals\/untagged.h 27:19@

    __exported by:__ @globals\/untagged.h@
-}
instance (ty ~ BG.CInt) => BG.CompatHasField.HasField "b_x" B ty where

  hasField =
    \x0 ->
      (\y1 ->
         BG.setUnionPayload y1 x0, BG.getField @"b_x" x0)

instance (ty ~ BG.CInt) => BG.HasField "b_x" (BG.Ptr B) (BG.Ptr ty) where

  getField = HasCField.fromPtr (BG.Proxy @"b_x")

instance HasCField.HasCField B "b_x" where

  type CFieldType B "b_x" = BG.CInt

  offset# = \_ -> \_ -> 0

{-| __C declaration:__ @struct \@C@

    __defined at:__ @globals\/untagged.h 30:1@

    __exported by:__ @globals\/untagged.h@
-}
data C = C
  { c_x :: BG.CInt
    {- ^ __C declaration:__ @x@

         __defined at:__ @globals\/untagged.h 30:14@

         __exported by:__ @globals\/untagged.h@
    -}
  }
  deriving stock (Eq, BG.Generic, Show)

instance Marshal.StaticSize C where

  staticSizeOf = \_ -> (4 :: Int)

  staticAlignment = \_ -> (4 :: Int)

instance Marshal.ReadRaw C where

  readRaw =
    \ptr0 ->
          pure C
      <*> HasCField.readRaw (BG.Proxy @"c_x") ptr0

instance Marshal.WriteRaw C where

  writeRaw =
    \ptr0 ->
      \s1 ->
        case s1 of
          C c_x2 ->
            HasCField.writeRaw (BG.Proxy @"c_x") ptr0 c_x2

deriving via Marshal.EquivStorable C instance BG.Storable C

deriving via Struct.IsStructViaReadRaw C instance Struct.IsStruct C

{-| __C declaration:__ @x@

    __defined at:__ @globals\/untagged.h 30:14@

    __exported by:__ @globals\/untagged.h@
-}
instance (ty ~ BG.CInt) => BG.CompatHasField.HasField "c_x" C ty where

  hasField =
    \x0 -> (\y1 -> C {c_x = y1}, BG.getField @"c_x" x0)

instance (ty ~ BG.CInt) => BG.HasField "c_x" (BG.Ptr C) (BG.Ptr ty) where

  getField = HasCField.fromPtr (BG.Proxy @"c_x")

instance HasCField.HasCField C "c_x" where

  type CFieldType C "c_x" = BG.CInt

  offset# = \_ -> \_ -> 0