{-# LANGUAGE DeriveDataTypeable    #-}
{-# LANGUAGE DeriveGeneric         #-}
{-# LANGUAGE FlexibleContexts      #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings     #-}
{-# LANGUAGE StrictData            #-}
{-# LANGUAGE TypeFamilies          #-}

-- |
-- Module      :  Data.BAM.Version1_6.BAM.ReferenceInformation.Base
-- Copyright   :  (c) Matthew Mosior 2023
-- License     :  BSD-style
-- Maintainer  :  mattm.github@gmail.com
-- Portability :  portable
--
-- = Description
--
-- This library enables the decoding/encoding of SAM, BAM and CRAM file formats.

module Data.BAM.Version1_6.BAM.ReferenceInformation.Base ( -- * BAM_V1_6_BAM_Reference_Information version 1.6 data type
                                                           BAM_V1_6_BAM_Reference_Information(..)
                                                         ) where

import Data.ByteString
import Data.Data
import Data.Word
import Generics.Deriving.Base

-- | Custom @"BAM_V1_6_BAM_Reference_Information"@ (BAM version 1.6) data type.
--
-- See the [SAM v1.6](http://samtools.github.io/hts-specs/SAMv1.pdf) specification documentation.
data BAM_V1_6_BAM_Reference_Information = BAM_V1_6_BAM_Reference_Information
  { BAM_V1_6_BAM_Reference_Information -> Word32
bam_v1_6_bam_reference_information_l_name :: Word32     -- ^ Length of the reference name plus 1 (including NUL).
  , BAM_V1_6_BAM_Reference_Information -> ByteString
bam_v1_6_bam_reference_information_name   :: ByteString -- ^ Reference sequence name; NUL terminated.
  , BAM_V1_6_BAM_Reference_Information -> Word32
bam_v1_6_bam_reference_information_l_ref  :: Word32     -- ^ Length of the reference sequence.
  } deriving ((forall x.
 BAM_V1_6_BAM_Reference_Information
 -> Rep BAM_V1_6_BAM_Reference_Information x)
-> (forall x.
    Rep BAM_V1_6_BAM_Reference_Information x
    -> BAM_V1_6_BAM_Reference_Information)
-> Generic BAM_V1_6_BAM_Reference_Information
forall x.
Rep BAM_V1_6_BAM_Reference_Information x
-> BAM_V1_6_BAM_Reference_Information
forall x.
BAM_V1_6_BAM_Reference_Information
-> Rep BAM_V1_6_BAM_Reference_Information x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
BAM_V1_6_BAM_Reference_Information
-> Rep BAM_V1_6_BAM_Reference_Information x
from :: forall x.
BAM_V1_6_BAM_Reference_Information
-> Rep BAM_V1_6_BAM_Reference_Information x
$cto :: forall x.
Rep BAM_V1_6_BAM_Reference_Information x
-> BAM_V1_6_BAM_Reference_Information
to :: forall x.
Rep BAM_V1_6_BAM_Reference_Information x
-> BAM_V1_6_BAM_Reference_Information
Generic,Typeable)

instance Eq BAM_V1_6_BAM_Reference_Information where
  BAM_V1_6_BAM_Reference_Information Word32
bam_v1_6_bam_reference_information_l_name1
                                     ByteString
bam_v1_6_bam_reference_information_name1
                                     Word32
bam_v1_6_bam_reference_information_l_ref1 == :: BAM_V1_6_BAM_Reference_Information
-> BAM_V1_6_BAM_Reference_Information -> Bool
==
    BAM_V1_6_BAM_Reference_Information Word32
bam_v1_6_bam_reference_information_l_name2
                                       ByteString
bam_v1_6_bam_reference_information_name2
                                       Word32
bam_v1_6_bam_reference_information_l_ref2 =
      Word32
bam_v1_6_bam_reference_information_l_name1 Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
bam_v1_6_bam_reference_information_l_name2 Bool -> Bool -> Bool
&&
      ByteString
bam_v1_6_bam_reference_information_name1   ByteString -> ByteString -> Bool
forall a. Eq a => a -> a -> Bool
== ByteString
bam_v1_6_bam_reference_information_name2   Bool -> Bool -> Bool
&&
      Word32
bam_v1_6_bam_reference_information_l_ref1  Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
bam_v1_6_bam_reference_information_l_ref2

instance Show BAM_V1_6_BAM_Reference_Information where
  show :: BAM_V1_6_BAM_Reference_Information -> String
show (BAM_V1_6_BAM_Reference_Information Word32
l_name
                                           ByteString
name
                                           Word32
l_ref
       ) =
    String
"BAM_V1_6_BAM_Reference_Information { "          String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
"bam_v1_6_bam_reference_information_l_name = "   String -> ShowS
forall a. [a] -> [a] -> [a]
++
    (Word32 -> String
forall a. Show a => a -> String
show Word32
l_name)                                    String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
" , bam_v1_6_bam_reference_information_name = "  String -> ShowS
forall a. [a] -> [a] -> [a]
++
    (ByteString -> String
forall a. Show a => a -> String
show ByteString
name)                                      String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
" , bam_v1_6_bam_reference_information_l_ref = " String -> ShowS
forall a. [a] -> [a] -> [a]
++
    (Word32 -> String
forall a. Show a => a -> String
show Word32
l_ref)                                     String -> ShowS
forall a. [a] -> [a] -> [a]
++
    String
" }"