packages feed

hs-samtools-0.8.0.0: src/Data/SAM/Version1_6/Header/HD.hs

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

-- |
-- Module      :  Data.SAM.Version1_6.Header.HD
-- 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.SAM.Version1_6.Header.HD ( -- * SAM version 1.6 File-level metadata data type
                                       SAM_V1_6_File_Level_Metadata(..),
                                       -- * SAM version 1.6 File-Level Metadata data types
                                       SAM_V1_6_File_Level_Metadata_Format_Version(..),
                                       SAM_V1_6_File_Level_Metadata_Sorting_Order(..),
                                       SAM_V1_6_File_Level_Metadata_Alignment_Grouping(..),
                                       SAM_V1_6_File_Level_Metadata_SubSorting_Order(..)
                                     ) where

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

-- | Custom SAM (version 1.6) @"SAM_V1_6_File_Level_Metadata"@ data type.
--
-- See section 1.3 of the [SAM v1.6](http://samtools.github.io/hts-specs/SAMv1.pdf) specification documentation.
data SAM_V1_6_File_Level_Metadata = SAM_V1_6_File_Level_Metadata { sam_v1_6_file_level_metadata_format_version     :: SAM_V1_6_File_Level_Metadata_Format_Version
                                                                 , sam_v1_6_file_level_metadata_sorting_order      :: Maybe SAM_V1_6_File_Level_Metadata_Sorting_Order
                                                                 , sam_v1_6_file_level_metadata_alignment_grouping :: Maybe SAM_V1_6_File_Level_Metadata_Alignment_Grouping
                                                                 , sam_v1_6_file_level_metadata_subsorting_order   :: Maybe SAM_V1_6_File_Level_Metadata_SubSorting_Order
                                                                 }
   deriving (Generic,Typeable)

instance Eq SAM_V1_6_File_Level_Metadata where
  SAM_V1_6_File_Level_Metadata sam_v1_6_file_level_metadata_format_version1
                               sam_v1_6_file_level_metadata_sorting_order1
                               sam_v1_6_file_level_metadata_alignment_grouping1
                               sam_v1_6_file_level_metadata_subsorting_order1 == SAM_V1_6_File_Level_Metadata sam_v1_6_file_level_metadata_format_version2
                                                                                                              sam_v1_6_file_level_metadata_sorting_order2
                                                                                                              sam_v1_6_file_level_metadata_alignment_grouping2
                                                                                                              sam_v1_6_file_level_metadata_subsorting_order2 = sam_v1_6_file_level_metadata_format_version1     == sam_v1_6_file_level_metadata_format_version2     &&
                                                                                                                                                               sam_v1_6_file_level_metadata_sorting_order1      == sam_v1_6_file_level_metadata_sorting_order2      &&
                                                                                                                                                               sam_v1_6_file_level_metadata_alignment_grouping1 == sam_v1_6_file_level_metadata_alignment_grouping2 &&
                                                                                                                                                               sam_v1_6_file_level_metadata_subsorting_order1   == sam_v1_6_file_level_metadata_subsorting_order2

instance Show SAM_V1_6_File_Level_Metadata where
  show (SAM_V1_6_File_Level_Metadata version sorting_order alignment_grouping subsorting_order) =
    "SAM_V1_6_File_Level_Metadata { "                       ++
    "sam_v1_6_file_level_metadata_format_version = "        ++
    (show version)                                          ++
    " , sam_v1_6_file_level_metadata_sorting_order = "      ++
    (show sorting_order)                                    ++
    " , sam_v1_6_file_level_metadata_alignment_grouping = " ++
    (show alignment_grouping)                               ++
    " , sam_v1_6_file_level_metadata_subsorting_order = "   ++
    (show subsorting_order)                                 ++
    " }" 

-- | VN tag for @"SAM_V1_6_File_Level_Metadata"@.
newtype SAM_V1_6_File_Level_Metadata_Format_Version = SAM_V1_6_File_Level_Metadata_Format_Version { sam_v1_6_file_level_metadata_format_version_value :: ByteString
                                                                                                  }
  deriving (Generic,Typeable)

instance Eq SAM_V1_6_File_Level_Metadata_Format_Version where
  SAM_V1_6_File_Level_Metadata_Format_Version sam_v1_6_file_level_metadata_format_version_value1 == SAM_V1_6_File_Level_Metadata_Format_Version sam_v1_6_file_level_metadata_format_version_value2 = sam_v1_6_file_level_metadata_format_version_value1 == sam_v1_6_file_level_metadata_format_version_value2

instance Show SAM_V1_6_File_Level_Metadata_Format_Version where
  show (SAM_V1_6_File_Level_Metadata_Format_Version value) =
    "SAM_V1_6_File_Level_Metadata_Format_Version { "       ++
    "sam_v1_6_file_level_metadata_format_version_value = " ++
    (show value)                                           ++
    " }"

-- | SO tag for @"SAM_V1_6_File_Level_Metadata"@.
newtype SAM_V1_6_File_Level_Metadata_Sorting_Order = SAM_V1_6_File_Level_Metadata_Sorting_Order { sam_v1_6_file_level_metadata_sorting_order_value :: ByteString
                                                                                                }
  deriving (Generic,Typeable)

instance Eq SAM_V1_6_File_Level_Metadata_Sorting_Order where
  SAM_V1_6_File_Level_Metadata_Sorting_Order sam_v1_6_file_level_metadata_sorting_order_value1 == SAM_V1_6_File_Level_Metadata_Sorting_Order sam_v1_6_file_level_metadata_sorting_order_value2 = sam_v1_6_file_level_metadata_sorting_order_value1 == sam_v1_6_file_level_metadata_sorting_order_value2

instance Show SAM_V1_6_File_Level_Metadata_Sorting_Order where
  show (SAM_V1_6_File_Level_Metadata_Sorting_Order value) =
    "SAM_V1_6_File_Level_Metadata_Sorting_Order { "       ++
    "sam_v1_6_file_level_metadata_sorting_order_value = " ++
    (show value)                                          ++
    " }"

-- | GO tag for @"SAM_V1_6_File_Level_Metadata"@.
newtype SAM_V1_6_File_Level_Metadata_Alignment_Grouping = SAM_V1_6_File_Level_Metadata_Alignment_Grouping { sam_v1_6_file_level_metadata_alignment_grouping_value :: ByteString
                                                                                                          }
  deriving (Generic,Typeable)

instance Eq SAM_V1_6_File_Level_Metadata_Alignment_Grouping where
  SAM_V1_6_File_Level_Metadata_Alignment_Grouping sam_v1_6_file_level_metadata_alignment_grouping_value1 == SAM_V1_6_File_Level_Metadata_Alignment_Grouping sam_v1_6_file_level_metadata_alignment_grouping_value2 = sam_v1_6_file_level_metadata_alignment_grouping_value1 == sam_v1_6_file_level_metadata_alignment_grouping_value2

instance Show SAM_V1_6_File_Level_Metadata_Alignment_Grouping where
  show (SAM_V1_6_File_Level_Metadata_Alignment_Grouping value) =
    "SAM_V1_6_File_Level_Metadata_Alignment_Grouping { "       ++
    "sam_v1_6_file_level_metadata_alignment_grouping_value = " ++
    (show value)                                               ++
    " }"

-- | SS tag for @"SAM_V1_6_File_Level_Metadata"@.
newtype SAM_V1_6_File_Level_Metadata_SubSorting_Order = SAM_V1_6_File_Level_Metadata_SubSorting_Order { sam_v1_6_file_level_metadata_subsorting_order_value :: ByteString
                                                                                                      }
  deriving (Generic,Typeable)

instance Eq SAM_V1_6_File_Level_Metadata_SubSorting_Order where
  SAM_V1_6_File_Level_Metadata_SubSorting_Order sam_v1_6_file_level_metadata_subsorting_order_value1 == SAM_V1_6_File_Level_Metadata_SubSorting_Order sam_v1_6_file_level_metadata_subsorting_order_value2 = sam_v1_6_file_level_metadata_subsorting_order_value1 == sam_v1_6_file_level_metadata_subsorting_order_value2

instance Show SAM_V1_6_File_Level_Metadata_SubSorting_Order where
  show (SAM_V1_6_File_Level_Metadata_SubSorting_Order value) =
    "SAM_V1_6_File_Level_Metadata_SubSorting_Order { "       ++
    "sam_v1_6_file_level_metadata_subsorting_order_value = " ++
    (show value)                                             ++
    " }"