{-# LANGUAGE UnicodeSyntax #-}

module Data.Endian.Unsafe (
    BigEndian(),
    LittleEndian(),

    unsafeAssertBigEndian,
    unsafeAssertLittleEndian,

    unsafeUnwrapBigEndian,
    unsafeUnwrapLittleEndian,

    swapEndian
  ) where

import Data.Endian.Internal
import Data.Endian.Wrap

-- | put in BigEndian newtype without any swapping
unsafeAssertBigEndian     EndianSensitive α  α  BigEndian α
unsafeAssertBigEndian    = BE
{-# INLINE unsafeAssertBigEndian #-}

-- | put in LittleEndian newtype without any swapping
unsafeAssertLittleEndian  EndianSensitive α  α  LittleEndian α
unsafeAssertLittleEndian = LE
{-# INLINE unsafeAssertLittleEndian #-}

-- | pull out of BigEndian newtype without any swapping
unsafeUnwrapBigEndian     EndianSensitive α  BigEndian α  α
unsafeUnwrapBigEndian    (BE a) = a
{-# INLINE unsafeUnwrapBigEndian #-}

-- | pull out of LittleEndian newtype without any swapping
unsafeUnwrapLittleEndian  EndianSensitive α  LittleEndian α  α
unsafeUnwrapLittleEndian (LE a) = a
{-# INLINE unsafeUnwrapLittleEndian #-}