{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE UndecidableInstances #-}

module Charon.Backend.Rosetta
  ( Rosetta (..),
  )
where

import Charon.Data.Index (Index)
import Charon.Prelude

-- | Rosetta is used to convert from/to backend. If we want to covert backends
-- b -> c, we essentially do c.fromRosetta (b.toRosetta()).
data Rosetta = MkRosetta
  { Rosetta -> Index
index :: Index,
    Rosetta -> Bytes 'B Natural
size :: Bytes B Natural
  }
  deriving stock (Rosetta -> Rosetta -> Bool
(Rosetta -> Rosetta -> Bool)
-> (Rosetta -> Rosetta -> Bool) -> Eq Rosetta
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Rosetta -> Rosetta -> Bool
== :: Rosetta -> Rosetta -> Bool
$c/= :: Rosetta -> Rosetta -> Bool
/= :: Rosetta -> Rosetta -> Bool
Eq, Int -> Rosetta -> ShowS
[Rosetta] -> ShowS
Rosetta -> String
(Int -> Rosetta -> ShowS)
-> (Rosetta -> String) -> ([Rosetta] -> ShowS) -> Show Rosetta
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Rosetta -> ShowS
showsPrec :: Int -> Rosetta -> ShowS
$cshow :: Rosetta -> String
show :: Rosetta -> String
$cshowList :: [Rosetta] -> ShowS
showList :: [Rosetta] -> ShowS
Show)

makeFieldLabelsNoPrefix ''Rosetta