module Network.Haskoin.Node.HeaderTree.Types where
import Data.Serialize (decode, encode)
import Data.String (fromString)
import Data.Word (Word32, Word64)
import Database.Persist (PersistField (..), PersistValue (..),
SqlType (..))
import Database.Persist.Sql (PersistFieldSql (..))
import Network.Haskoin.Block
type BlockHeight = Word32
type ShortHash = Word64
type Timestamp = Word32
type Work = Double
newtype NodeHeader = NodeHeader { getNodeHeader :: BlockHeader }
deriving (Show, Eq)
instance PersistField NodeHeader where
toPersistValue = PersistByteString . encode . getNodeHeader
fromPersistValue (PersistByteString bs) =
case decode bs of
Right x -> Right (NodeHeader x)
Left e -> Left (fromString e)
fromPersistValue _ = Left "Invalid persistent block header"
instance PersistFieldSql NodeHeader where
sqlType _ = SqlBlob