module Data.Serialize.Describe.Combinators.ByteEnum where import GHC.Generics hiding (from) import Control.Lens.Wrapped import Control.Lens.Iso import Data.Word import Data.Serialize.Describe.Class import Data.Serialize.Describe.Isomorphisms -- | Wraps an @Enum@ to be described as a Word8. Intended to be used with DerivingVia so as to not introduce unnecessary newtype wrappers: -- >>> -- data MyEnum = A | B | C -- deriving Enum -- deriving Describe via ByteEnum MyEnum newtype ByteEnum e = ByteEnum { unwrapByteEnum :: e } deriving (Generic) deriving anyclass instance Wrapped (ByteEnum e) instance Enum e => Describe (ByteEnum e) where describe = isoField @Word8 (_Wrapped' . from enum . fi) id