{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeFamilies #-}
{-# Language QuasiQuotes #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
module Data.SAM.Version1_6.Read.Parser.Alignment.Base (
parse_SAM_V1_6_Alignment
) where
import Data.SAM.Version1_6.Alignment
import Data.SAM.Version1_6.Read.Error
import Data.SAM.Version1_6.Alignment.OptionalFields.Base
import Data.SAM.Version1_6.Read.Parser.Alignment.OptionalFields.AOPT
import Data.SAM.Version1_6.Read.Parser.Alignment.OptionalFields.IOPT
import Data.SAM.Version1_6.Read.Parser.Alignment.OptionalFields.FOPT
import Data.SAM.Version1_6.Read.Parser.Alignment.OptionalFields.ZOPT
import Data.SAM.Version1_6.Read.Parser.Alignment.OptionalFields.HOPT
import Data.SAM.Version1_6.Read.Parser.Alignment.OptionalFields.BOPT
import Data.Attoparsec.ByteString.Char8 as DABC8 (endOfLine,isEndOfLine)
import Data.Attoparsec.ByteString.Lazy as DABL
import qualified Data.ByteString as DB
import qualified Data.ByteString.Char8 as DBC8
import Data.List as DL (intercalate)
import Data.Sequence as DSeq (empty,Seq(..))
import Text.Regex.PCRE.Heavy
parse_SAM_V1_6_Alignment :: Parser SAM_V1_6_Alignment
parse_SAM_V1_6_Alignment :: Parser SAM_V1_6_Alignment
parse_SAM_V1_6_Alignment = do
ByteString
qname <- do
ByteString
qnamep <-
(Word8 -> Bool) -> Parser ByteString ByteString
DABL.takeTill (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
09)
case (ByteString
qnamep ByteString -> Regex -> Bool
forall a. ConvertibleStrings a ByteString => a -> Regex -> Bool
=~ [re|[!-?A-~]{1,254}|\*|]) of
Bool
False ->
[Char] -> Parser ByteString ByteString
forall a. [Char] -> Parser ByteString a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> Parser ByteString ByteString)
-> [Char] -> Parser ByteString ByteString
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Error_Alignment_QNAME_Incorrect_Format
Bool
True ->
ByteString -> Parser ByteString ByteString
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return ByteString
qnamep
Word8
_ <-
Word8 -> Parser Word8
word8 Word8
09
ByteString
flag <- do
ByteString
flagp <-
(Word8 -> Bool) -> Parser ByteString ByteString
DABL.takeTill (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
09)
case (ByteString
flagp ByteString -> Regex -> Bool
forall a. ConvertibleStrings a ByteString => a -> Regex -> Bool
=~ [re|[0-9]+|]) of
Bool
False ->
[Char] -> Parser ByteString ByteString
forall a. [Char] -> Parser ByteString a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> Parser ByteString ByteString)
-> [Char] -> Parser ByteString ByteString
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Error_Alignment_FLAG_Incorrect_Format
Bool
True ->
ByteString -> Parser ByteString ByteString
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return ByteString
flagp
Word8
_ <-
Word8 -> Parser Word8
word8 Word8
09
ByteString
rname <- do
ByteString
rnamep <-
(Word8 -> Bool) -> Parser ByteString ByteString
DABL.takeTill (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
09)
case (ByteString
rnamep ByteString -> Regex -> Bool
forall a. ConvertibleStrings a ByteString => a -> Regex -> Bool
=~ [re|\*|[0-9A-Za-z!#$%&+.:;?@^_|~-][0-9A-Za-z!#$%&*+.:;=?@^_|~-]*|]) of
Bool
False ->
[Char] -> Parser ByteString ByteString
forall a. [Char] -> Parser ByteString a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> Parser ByteString ByteString)
-> [Char] -> Parser ByteString ByteString
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Error_Alignment_RNAME_Incorrect_Format
Bool
True ->
ByteString -> Parser ByteString ByteString
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return ByteString
rnamep
Word8
_ <-
Word8 -> Parser Word8
word8 Word8
09
ByteString
pos <- do
ByteString
posp <-
(Word8 -> Bool) -> Parser ByteString ByteString
DABL.takeTill (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
09)
case (ByteString
posp ByteString -> Regex -> Bool
forall a. ConvertibleStrings a ByteString => a -> Regex -> Bool
=~ [re|[0-9]+|]) of
Bool
False ->
[Char] -> Parser ByteString ByteString
forall a. [Char] -> Parser ByteString a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> Parser ByteString ByteString)
-> [Char] -> Parser ByteString ByteString
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Error_Alignment_POS_Incorrect_Format
Bool
True ->
ByteString -> Parser ByteString ByteString
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return ByteString
posp
Word8
_ <-
Word8 -> Parser Word8
word8 Word8
09
ByteString
mapq <- do
ByteString
mapqp <-
(Word8 -> Bool) -> Parser ByteString ByteString
DABL.takeTill (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
09)
case (ByteString
mapqp ByteString -> Regex -> Bool
forall a. ConvertibleStrings a ByteString => a -> Regex -> Bool
=~ [re|[0-9]+|]) of
Bool
False ->
[Char] -> Parser ByteString ByteString
forall a. [Char] -> Parser ByteString a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> Parser ByteString ByteString)
-> [Char] -> Parser ByteString ByteString
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Error_Alignment_MAPQ_Incorrect_Format
Bool
True ->
ByteString -> Parser ByteString ByteString
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return ByteString
mapqp
Word8
_ <-
Word8 -> Parser Word8
word8 Word8
09
ByteString
cigar <- do
ByteString
cigarp <-
(Word8 -> Bool) -> Parser ByteString ByteString
DABL.takeTill (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
09)
case (ByteString
cigarp ByteString -> Regex -> Bool
forall a. ConvertibleStrings a ByteString => a -> Regex -> Bool
=~ [re|\*|([0-9]+[MIDNSHPX=])+|]) of
Bool
False ->
[Char] -> Parser ByteString ByteString
forall a. [Char] -> Parser ByteString a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> Parser ByteString ByteString)
-> [Char] -> Parser ByteString ByteString
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Error_Alignment_CIGAR_Incorrect_Format
Bool
True ->
ByteString -> Parser ByteString ByteString
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return ByteString
cigarp
Word8
_ <-
Word8 -> Parser Word8
word8 Word8
09
ByteString
rnext <- do
ByteString
rnextp <-
(Word8 -> Bool) -> Parser ByteString ByteString
DABL.takeTill (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
09)
case (ByteString
rnextp ByteString -> Regex -> Bool
forall a. ConvertibleStrings a ByteString => a -> Regex -> Bool
=~ [re|\*|=|[0-9A-Za-z!#$%&+.:;?@^_|~-][0-9A-Za-z!#$%&*+.:;=?@^_|~-]*|]) of
Bool
False ->
[Char] -> Parser ByteString ByteString
forall a. [Char] -> Parser ByteString a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> Parser ByteString ByteString)
-> [Char] -> Parser ByteString ByteString
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Error_Alignment_RNEXT_Incorrect_Format
Bool
True ->
ByteString -> Parser ByteString ByteString
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return ByteString
rnextp
Word8
_ <-
Word8 -> Parser Word8
word8 Word8
09
ByteString
pnext <- do
ByteString
pnextp <-
(Word8 -> Bool) -> Parser ByteString ByteString
DABL.takeTill (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
09)
case (ByteString
pnextp ByteString -> Regex -> Bool
forall a. ConvertibleStrings a ByteString => a -> Regex -> Bool
=~ [re|[0-9]+|]) of
Bool
False ->
[Char] -> Parser ByteString ByteString
forall a. [Char] -> Parser ByteString a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> Parser ByteString ByteString)
-> [Char] -> Parser ByteString ByteString
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Error_Alignment_PNEXT_Incorrect_Format
Bool
True ->
ByteString -> Parser ByteString ByteString
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return ByteString
pnextp
Word8
_ <-
Word8 -> Parser Word8
word8 Word8
09
ByteString
tlen <- do
ByteString
tlenp <-
(Word8 -> Bool) -> Parser ByteString ByteString
DABL.takeTill (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
09)
case (ByteString
tlenp ByteString -> Regex -> Bool
forall a. ConvertibleStrings a ByteString => a -> Regex -> Bool
=~ [re|[-]?[0-9]+|]) of
Bool
False ->
[Char] -> Parser ByteString ByteString
forall a. [Char] -> Parser ByteString a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> Parser ByteString ByteString)
-> [Char] -> Parser ByteString ByteString
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Error_Alignment_TLEN_Incorrect_Format
Bool
True ->
ByteString -> Parser ByteString ByteString
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return ByteString
tlenp
Word8
_ <-
Word8 -> Parser Word8
word8 Word8
09
ByteString
seq <- do
ByteString
seqp <-
(Word8 -> Bool) -> Parser ByteString ByteString
DABL.takeTill (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
09)
case (ByteString
seqp ByteString -> Regex -> Bool
forall a. ConvertibleStrings a ByteString => a -> Regex -> Bool
=~ [re|\*|[A-Za-z=.]+|]) of
Bool
False ->
[Char] -> Parser ByteString ByteString
forall a. [Char] -> Parser ByteString a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> Parser ByteString ByteString)
-> [Char] -> Parser ByteString ByteString
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Error_Alignment_SEQ_Incorrect_Format
Bool
True ->
ByteString -> Parser ByteString ByteString
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return ByteString
seqp
Word8
_ <-
Word8 -> Parser Word8
word8 Word8
09
ByteString
qual <- do
ByteString
qualp <-
(Word8 -> Bool) -> Parser ByteString ByteString
DABL.takeTill (\Word8
x -> Word8
x Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
09 Bool -> Bool -> Bool
|| Word8 -> Bool
isEndOfLine Word8
x)
case (ByteString
qualp ByteString -> Regex -> Bool
forall a. ConvertibleStrings a ByteString => a -> Regex -> Bool
=~ [re|[!-~?]+|\*|]) of
Bool
False ->
[Char] -> Parser ByteString ByteString
forall a. [Char] -> Parser ByteString a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> Parser ByteString ByteString)
-> [Char] -> Parser ByteString ByteString
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Error_Alignment_QUAL_Incorrect_Format
Bool
True ->
ByteString -> Parser ByteString ByteString
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return ByteString
qualp
Maybe Word8
optfields <-
Parser (Maybe Word8)
peekWord8
case Maybe Word8
optfields of
Just Word8
10 -> do
()
_ <-
Parser ()
endOfLine
SAM_V1_6_Alignment -> Parser SAM_V1_6_Alignment
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return SAM_V1_6_Alignment { sam_v1_6_alignment_qname :: ByteString
sam_v1_6_alignment_qname = ByteString
qname
, sam_v1_6_alignment_flag :: Int
sam_v1_6_alignment_flag = case (ByteString -> Maybe (Int, ByteString)
DBC8.readInt ByteString
flag) of
Maybe (Int, ByteString)
Nothing ->
(-Int
1)
Just (Int
flagint,ByteString
_) ->
Int
flagint
, sam_v1_6_alignment_rname :: ByteString
sam_v1_6_alignment_rname = ByteString
rname
, sam_v1_6_alignment_pos :: Integer
sam_v1_6_alignment_pos = case (ByteString -> Maybe (Integer, ByteString)
DBC8.readInteger ByteString
pos) of
Maybe (Integer, ByteString)
Nothing ->
Integer
0
Just (Integer
posinteger,ByteString
_) ->
Integer
posinteger
, sam_v1_6_alignment_mapq :: Int
sam_v1_6_alignment_mapq = case (ByteString -> Maybe (Int, ByteString)
DBC8.readInt ByteString
mapq) of
Maybe (Int, ByteString)
Nothing ->
Int
255
Just (Int
mapqint,ByteString
_) ->
Int
mapqint
, sam_v1_6_alignment_cigar :: ByteString
sam_v1_6_alignment_cigar = ByteString
cigar
, sam_v1_6_alignment_rnext :: ByteString
sam_v1_6_alignment_rnext = ByteString
rnext
, sam_v1_6_alignment_pnext :: Integer
sam_v1_6_alignment_pnext = case (ByteString -> Maybe (Integer, ByteString)
DBC8.readInteger ByteString
pnext) of
Maybe (Integer, ByteString)
Nothing ->
Integer
0
Just (Integer
pnextinteger,ByteString
_) ->
Integer
pnextinteger
, sam_v1_6_alignment_tlen :: Integer
sam_v1_6_alignment_tlen = case (ByteString -> Maybe (Integer, ByteString)
DBC8.readInteger ByteString
tlen) of
Maybe (Integer, ByteString)
Nothing ->
Integer
0
Just (Integer
tleninteger,ByteString
_) ->
Integer
tleninteger
, sam_v1_6_alignment_seq :: ByteString
sam_v1_6_alignment_seq = ByteString
seq
, sam_v1_6_alignment_qual :: ByteString
sam_v1_6_alignment_qual = ByteString
qual
, sam_v1_6_alignment_optionalfields :: Maybe (Seq SAM_V1_6_Alignment_OptionalFields)
sam_v1_6_alignment_optionalfields = Maybe (Seq SAM_V1_6_Alignment_OptionalFields)
forall a. Maybe a
Nothing
}
Maybe Word8
_ -> do
Word8
_ <-
Word8 -> Parser Word8
word8 Word8
09
ByteString
optionalfieldsbytes <-
(Word8 -> Bool) -> Parser ByteString ByteString
DABL.takeTill Word8 -> Bool
isEndOfLine
Seq SAM_V1_6_Alignment_OptionalFields
optionalfields <-
Seq SAM_V1_6_Alignment_OptionalFields
-> Parser ByteString (Seq SAM_V1_6_Alignment_OptionalFields)
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return (Seq SAM_V1_6_Alignment_OptionalFields
-> Parser ByteString (Seq SAM_V1_6_Alignment_OptionalFields))
-> Seq SAM_V1_6_Alignment_OptionalFields
-> Parser ByteString (Seq SAM_V1_6_Alignment_OptionalFields)
forall a b. (a -> b) -> a -> b
$
ByteString -> Seq SAM_V1_6_Alignment_OptionalFields
parse_OptionalFields ByteString
optionalfieldsbytes
()
_ <-
Parser ()
endOfLine
SAM_V1_6_Alignment -> Parser SAM_V1_6_Alignment
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return SAM_V1_6_Alignment { sam_v1_6_alignment_qname :: ByteString
sam_v1_6_alignment_qname = ByteString
qname
, sam_v1_6_alignment_flag :: Int
sam_v1_6_alignment_flag = case (ByteString -> Maybe (Int, ByteString)
DBC8.readInt ByteString
flag) of
Maybe (Int, ByteString)
Nothing ->
(-Int
1)
Just (Int
flagint,ByteString
_) ->
Int
flagint
, sam_v1_6_alignment_rname :: ByteString
sam_v1_6_alignment_rname = ByteString
rname
, sam_v1_6_alignment_pos :: Integer
sam_v1_6_alignment_pos = case (ByteString -> Maybe (Integer, ByteString)
DBC8.readInteger ByteString
pos) of
Maybe (Integer, ByteString)
Nothing ->
Integer
0
Just (Integer
posinteger,ByteString
_) ->
Integer
posinteger
, sam_v1_6_alignment_mapq :: Int
sam_v1_6_alignment_mapq = case (ByteString -> Maybe (Int, ByteString)
DBC8.readInt ByteString
mapq) of
Maybe (Int, ByteString)
Nothing ->
Int
255
Just (Int
mapqint,ByteString
_) ->
Int
mapqint
, sam_v1_6_alignment_cigar :: ByteString
sam_v1_6_alignment_cigar = ByteString
cigar
, sam_v1_6_alignment_rnext :: ByteString
sam_v1_6_alignment_rnext = ByteString
rnext
, sam_v1_6_alignment_pnext :: Integer
sam_v1_6_alignment_pnext = case (ByteString -> Maybe (Integer, ByteString)
DBC8.readInteger ByteString
pnext) of
Maybe (Integer, ByteString)
Nothing ->
Integer
0
Just (Integer
pnextinteger,ByteString
_) ->
Integer
pnextinteger
, sam_v1_6_alignment_tlen :: Integer
sam_v1_6_alignment_tlen = case (ByteString -> Maybe (Integer, ByteString)
DBC8.readInteger ByteString
tlen) of
Maybe (Integer, ByteString)
Nothing ->
Integer
0
Just (Integer
tleninteger,ByteString
_) ->
Integer
tleninteger
, sam_v1_6_alignment_seq :: ByteString
sam_v1_6_alignment_seq = ByteString
seq
, sam_v1_6_alignment_qual :: ByteString
sam_v1_6_alignment_qual = ByteString
qual
, sam_v1_6_alignment_optionalfields :: Maybe (Seq SAM_V1_6_Alignment_OptionalFields)
sam_v1_6_alignment_optionalfields = Seq SAM_V1_6_Alignment_OptionalFields
-> Maybe (Seq SAM_V1_6_Alignment_OptionalFields)
forall a. a -> Maybe a
Just Seq SAM_V1_6_Alignment_OptionalFields
optionalfields
}
where
parse_OptionalFields :: DB.ByteString
-> Seq SAM_V1_6_Alignment_OptionalFields
parse_OptionalFields :: ByteString -> Seq SAM_V1_6_Alignment_OptionalFields
parse_OptionalFields ByteString
bs = do
case ByteString -> Bool
DB.null ByteString
bs of
Bool
True ->
Seq SAM_V1_6_Alignment_OptionalFields
forall a. Seq a
DSeq.empty
Bool
False ->
case ByteString -> Int -> Maybe Word8
DB.indexMaybe ByteString
bs Int
3 of
Maybe Word8
Nothing ->
[Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq SAM_V1_6_Alignment_OptionalFields)
-> [Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Read_Error_Alignment_OptionalFields_Index_Missing
Just Word8
0x41 ->
case ( Parser SAM_V1_6_Alignment_OptionalFields_AOPT
-> ByteString -> Result SAM_V1_6_Alignment_OptionalFields_AOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser SAM_V1_6_Alignment_OptionalFields_AOPT
parse_SAM_V1_6_Alignment_OptionalFields_AOPT
( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
(Word8 -> Bool) -> ByteString -> ByteString
DB.takeWhile (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word8
0x09)
ByteString
bs
)
) of
Fail ByteString
_
[[Char]]
ctxs
[Char]
err ->
[Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq SAM_V1_6_Alignment_OptionalFields)
-> [Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
[Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing AOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"\n" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"Parsing contexts: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs) [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"\n" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"Error message: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
err
Done ByteString
remainingbytes
SAM_V1_6_Alignment_OptionalFields_AOPT
parsedbs -> do
let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
Bool
True ->
SAM_V1_6_Alignment_OptionalFields
{ sam_v1_6_alignment_optionalfields_aopt :: Maybe SAM_V1_6_Alignment_OptionalFields_AOPT
sam_v1_6_alignment_optionalfields_aopt = SAM_V1_6_Alignment_OptionalFields_AOPT
-> Maybe SAM_V1_6_Alignment_OptionalFields_AOPT
forall a. a -> Maybe a
Just SAM_V1_6_Alignment_OptionalFields_AOPT
parsedbs
, sam_v1_6_alignment_optionalfields_iopt :: Maybe SAM_V1_6_Alignment_OptionalFields_IOPT
sam_v1_6_alignment_optionalfields_iopt = Maybe SAM_V1_6_Alignment_OptionalFields_IOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_fopt :: Maybe SAM_V1_6_Alignment_OptionalFields_FOPT
sam_v1_6_alignment_optionalfields_fopt = Maybe SAM_V1_6_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_zopt :: Maybe SAM_V1_6_Alignment_OptionalFields_ZOPT
sam_v1_6_alignment_optionalfields_zopt = Maybe SAM_V1_6_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_hopt :: Maybe SAM_V1_6_Alignment_OptionalFields_HOPT
sam_v1_6_alignment_optionalfields_hopt = Maybe SAM_V1_6_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_bopt :: Maybe SAM_V1_6_Alignment_OptionalFields_BOPT
sam_v1_6_alignment_optionalfields_bopt = Maybe SAM_V1_6_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
}
SAM_V1_6_Alignment_OptionalFields
-> Seq SAM_V1_6_Alignment_OptionalFields
-> Seq SAM_V1_6_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
ByteString -> Seq SAM_V1_6_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop Int
1 (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
(Word8 -> Bool) -> ByteString -> ByteString
DB.dropWhile (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word8
0x09)
ByteString
bs
)
Bool
False ->
[Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq SAM_V1_6_Alignment_OptionalFields)
-> [Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
Just Word8
0x69 ->
case ( Parser SAM_V1_6_Alignment_OptionalFields_IOPT
-> ByteString -> Result SAM_V1_6_Alignment_OptionalFields_IOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser SAM_V1_6_Alignment_OptionalFields_IOPT
parse_SAM_V1_6_Alignment_OptionalFields_IOPT
( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
(Word8 -> Bool) -> ByteString -> ByteString
DB.takeWhile (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word8
0x09)
ByteString
bs
)
) of
Fail ByteString
_
[[Char]]
ctxs
[Char]
err ->
[Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq SAM_V1_6_Alignment_OptionalFields)
-> [Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
[Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing IOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"\n" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"Parsing contexts: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs) [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"\n" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"Error message: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
err
Done ByteString
remainingbytes
SAM_V1_6_Alignment_OptionalFields_IOPT
parsedbs -> do
let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
Bool
True ->
SAM_V1_6_Alignment_OptionalFields
{ sam_v1_6_alignment_optionalfields_aopt :: Maybe SAM_V1_6_Alignment_OptionalFields_AOPT
sam_v1_6_alignment_optionalfields_aopt = Maybe SAM_V1_6_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_iopt :: Maybe SAM_V1_6_Alignment_OptionalFields_IOPT
sam_v1_6_alignment_optionalfields_iopt = SAM_V1_6_Alignment_OptionalFields_IOPT
-> Maybe SAM_V1_6_Alignment_OptionalFields_IOPT
forall a. a -> Maybe a
Just SAM_V1_6_Alignment_OptionalFields_IOPT
parsedbs
, sam_v1_6_alignment_optionalfields_fopt :: Maybe SAM_V1_6_Alignment_OptionalFields_FOPT
sam_v1_6_alignment_optionalfields_fopt = Maybe SAM_V1_6_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_zopt :: Maybe SAM_V1_6_Alignment_OptionalFields_ZOPT
sam_v1_6_alignment_optionalfields_zopt = Maybe SAM_V1_6_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_hopt :: Maybe SAM_V1_6_Alignment_OptionalFields_HOPT
sam_v1_6_alignment_optionalfields_hopt = Maybe SAM_V1_6_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_bopt :: Maybe SAM_V1_6_Alignment_OptionalFields_BOPT
sam_v1_6_alignment_optionalfields_bopt = Maybe SAM_V1_6_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
}
SAM_V1_6_Alignment_OptionalFields
-> Seq SAM_V1_6_Alignment_OptionalFields
-> Seq SAM_V1_6_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
ByteString -> Seq SAM_V1_6_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop Int
1 (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
(Word8 -> Bool) -> ByteString -> ByteString
DB.dropWhile (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word8
0x09)
ByteString
bs
)
Bool
False ->
[Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq SAM_V1_6_Alignment_OptionalFields)
-> [Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
Just Word8
0x66 ->
case ( Parser SAM_V1_6_Alignment_OptionalFields_FOPT
-> ByteString -> Result SAM_V1_6_Alignment_OptionalFields_FOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser SAM_V1_6_Alignment_OptionalFields_FOPT
parse_SAM_V1_6_Alignment_OptionalFields_FOPT
( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
(Word8 -> Bool) -> ByteString -> ByteString
DB.takeWhile (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word8
0x09)
ByteString
bs
)
) of
Fail ByteString
_
[[Char]]
ctxs
[Char]
err ->
[Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq SAM_V1_6_Alignment_OptionalFields)
-> [Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
[Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing FOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"\n" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"Parsing contexts: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs) [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"\n" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"Error message: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
err
Done ByteString
remainingbytes
SAM_V1_6_Alignment_OptionalFields_FOPT
parsedbs -> do
let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
Bool
True ->
SAM_V1_6_Alignment_OptionalFields
{ sam_v1_6_alignment_optionalfields_aopt :: Maybe SAM_V1_6_Alignment_OptionalFields_AOPT
sam_v1_6_alignment_optionalfields_aopt = Maybe SAM_V1_6_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_iopt :: Maybe SAM_V1_6_Alignment_OptionalFields_IOPT
sam_v1_6_alignment_optionalfields_iopt = Maybe SAM_V1_6_Alignment_OptionalFields_IOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_fopt :: Maybe SAM_V1_6_Alignment_OptionalFields_FOPT
sam_v1_6_alignment_optionalfields_fopt = SAM_V1_6_Alignment_OptionalFields_FOPT
-> Maybe SAM_V1_6_Alignment_OptionalFields_FOPT
forall a. a -> Maybe a
Just SAM_V1_6_Alignment_OptionalFields_FOPT
parsedbs
, sam_v1_6_alignment_optionalfields_zopt :: Maybe SAM_V1_6_Alignment_OptionalFields_ZOPT
sam_v1_6_alignment_optionalfields_zopt = Maybe SAM_V1_6_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_hopt :: Maybe SAM_V1_6_Alignment_OptionalFields_HOPT
sam_v1_6_alignment_optionalfields_hopt = Maybe SAM_V1_6_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_bopt :: Maybe SAM_V1_6_Alignment_OptionalFields_BOPT
sam_v1_6_alignment_optionalfields_bopt = Maybe SAM_V1_6_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
}
SAM_V1_6_Alignment_OptionalFields
-> Seq SAM_V1_6_Alignment_OptionalFields
-> Seq SAM_V1_6_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
ByteString -> Seq SAM_V1_6_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop Int
1 (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
(Word8 -> Bool) -> ByteString -> ByteString
DB.dropWhile (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word8
0x09)
ByteString
bs
)
Bool
False ->
[Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq SAM_V1_6_Alignment_OptionalFields)
-> [Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
Just Word8
0x5A ->
case ( Parser SAM_V1_6_Alignment_OptionalFields_ZOPT
-> ByteString -> Result SAM_V1_6_Alignment_OptionalFields_ZOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser SAM_V1_6_Alignment_OptionalFields_ZOPT
parse_SAM_V1_6_Alignment_OptionalFields_ZOPT
( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
(Word8 -> Bool) -> ByteString -> ByteString
DB.takeWhile (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word8
0x09)
ByteString
bs
)
) of
Fail ByteString
_
[[Char]]
ctxs
[Char]
err ->
[Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq SAM_V1_6_Alignment_OptionalFields)
-> [Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
[Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing ZOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"\n" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"Parsing contexts: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs) [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"\n" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"Error message: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
err
Done ByteString
remainingbytes
SAM_V1_6_Alignment_OptionalFields_ZOPT
parsedbs -> do
let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
Bool
True ->
SAM_V1_6_Alignment_OptionalFields
{ sam_v1_6_alignment_optionalfields_aopt :: Maybe SAM_V1_6_Alignment_OptionalFields_AOPT
sam_v1_6_alignment_optionalfields_aopt = Maybe SAM_V1_6_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_iopt :: Maybe SAM_V1_6_Alignment_OptionalFields_IOPT
sam_v1_6_alignment_optionalfields_iopt = Maybe SAM_V1_6_Alignment_OptionalFields_IOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_fopt :: Maybe SAM_V1_6_Alignment_OptionalFields_FOPT
sam_v1_6_alignment_optionalfields_fopt = Maybe SAM_V1_6_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_zopt :: Maybe SAM_V1_6_Alignment_OptionalFields_ZOPT
sam_v1_6_alignment_optionalfields_zopt = SAM_V1_6_Alignment_OptionalFields_ZOPT
-> Maybe SAM_V1_6_Alignment_OptionalFields_ZOPT
forall a. a -> Maybe a
Just SAM_V1_6_Alignment_OptionalFields_ZOPT
parsedbs
, sam_v1_6_alignment_optionalfields_hopt :: Maybe SAM_V1_6_Alignment_OptionalFields_HOPT
sam_v1_6_alignment_optionalfields_hopt = Maybe SAM_V1_6_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_bopt :: Maybe SAM_V1_6_Alignment_OptionalFields_BOPT
sam_v1_6_alignment_optionalfields_bopt = Maybe SAM_V1_6_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
}
SAM_V1_6_Alignment_OptionalFields
-> Seq SAM_V1_6_Alignment_OptionalFields
-> Seq SAM_V1_6_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
ByteString -> Seq SAM_V1_6_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop Int
1 (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
(Word8 -> Bool) -> ByteString -> ByteString
DB.dropWhile (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word8
0x09)
ByteString
bs
)
Bool
False ->
[Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq SAM_V1_6_Alignment_OptionalFields)
-> [Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
Just Word8
0x48 ->
case ( Parser SAM_V1_6_Alignment_OptionalFields_HOPT
-> ByteString -> Result SAM_V1_6_Alignment_OptionalFields_HOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser SAM_V1_6_Alignment_OptionalFields_HOPT
parse_SAM_V1_6_Alignment_OptionalFields_HOPT
( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
(Word8 -> Bool) -> ByteString -> ByteString
DB.takeWhile (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word8
0x09)
ByteString
bs
)
) of
Fail ByteString
_
[[Char]]
ctxs
[Char]
err ->
[Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq SAM_V1_6_Alignment_OptionalFields)
-> [Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
[Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing HOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"\n" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"Parsing contexts: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs) [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"\n" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"Error message: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
err
Done ByteString
remainingbytes
SAM_V1_6_Alignment_OptionalFields_HOPT
parsedbs -> do
let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
Bool
True ->
SAM_V1_6_Alignment_OptionalFields
{ sam_v1_6_alignment_optionalfields_aopt :: Maybe SAM_V1_6_Alignment_OptionalFields_AOPT
sam_v1_6_alignment_optionalfields_aopt = Maybe SAM_V1_6_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_iopt :: Maybe SAM_V1_6_Alignment_OptionalFields_IOPT
sam_v1_6_alignment_optionalfields_iopt = Maybe SAM_V1_6_Alignment_OptionalFields_IOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_fopt :: Maybe SAM_V1_6_Alignment_OptionalFields_FOPT
sam_v1_6_alignment_optionalfields_fopt = Maybe SAM_V1_6_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_zopt :: Maybe SAM_V1_6_Alignment_OptionalFields_ZOPT
sam_v1_6_alignment_optionalfields_zopt = Maybe SAM_V1_6_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_hopt :: Maybe SAM_V1_6_Alignment_OptionalFields_HOPT
sam_v1_6_alignment_optionalfields_hopt = SAM_V1_6_Alignment_OptionalFields_HOPT
-> Maybe SAM_V1_6_Alignment_OptionalFields_HOPT
forall a. a -> Maybe a
Just SAM_V1_6_Alignment_OptionalFields_HOPT
parsedbs
, sam_v1_6_alignment_optionalfields_bopt :: Maybe SAM_V1_6_Alignment_OptionalFields_BOPT
sam_v1_6_alignment_optionalfields_bopt = Maybe SAM_V1_6_Alignment_OptionalFields_BOPT
forall a. Maybe a
Nothing
}
SAM_V1_6_Alignment_OptionalFields
-> Seq SAM_V1_6_Alignment_OptionalFields
-> Seq SAM_V1_6_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
ByteString -> Seq SAM_V1_6_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop Int
1 (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
(Word8 -> Bool) -> ByteString -> ByteString
DB.dropWhile (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word8
0x09)
ByteString
bs
)
Bool
False ->
[Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq SAM_V1_6_Alignment_OptionalFields)
-> [Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
Just Word8
0x42 ->
case ( Parser SAM_V1_6_Alignment_OptionalFields_BOPT
-> ByteString -> Result SAM_V1_6_Alignment_OptionalFields_BOPT
forall a. Parser a -> ByteString -> Result a
DABL.parse Parser SAM_V1_6_Alignment_OptionalFields_BOPT
parse_SAM_V1_6_Alignment_OptionalFields_BOPT
( ByteString -> ByteString
DB.fromStrict (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
(Word8 -> Bool) -> ByteString -> ByteString
DB.takeWhile (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word8
0x09)
ByteString
bs
)
) of
Fail ByteString
_
[[Char]]
ctxs
[Char]
err ->
[Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq SAM_V1_6_Alignment_OptionalFields)
-> [Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
[Char] -> [Char]
forall a. Show a => a -> [Char]
show ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"Error while parsing BOPT field." [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"\n" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"Parsing contexts: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
", " [[Char]]
ctxs) [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"\n" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"Error message: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
err
Done ByteString
remainingbytes
SAM_V1_6_Alignment_OptionalFields_BOPT
parsedbs -> do
let strictremainingbytes :: ByteString
strictremainingbytes = ByteString -> ByteString
DB.toStrict ByteString
remainingbytes
case ByteString -> Bool
DB.null ByteString
strictremainingbytes of
Bool
True ->
SAM_V1_6_Alignment_OptionalFields
{ sam_v1_6_alignment_optionalfields_aopt :: Maybe SAM_V1_6_Alignment_OptionalFields_AOPT
sam_v1_6_alignment_optionalfields_aopt = Maybe SAM_V1_6_Alignment_OptionalFields_AOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_iopt :: Maybe SAM_V1_6_Alignment_OptionalFields_IOPT
sam_v1_6_alignment_optionalfields_iopt = Maybe SAM_V1_6_Alignment_OptionalFields_IOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_fopt :: Maybe SAM_V1_6_Alignment_OptionalFields_FOPT
sam_v1_6_alignment_optionalfields_fopt = Maybe SAM_V1_6_Alignment_OptionalFields_FOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_zopt :: Maybe SAM_V1_6_Alignment_OptionalFields_ZOPT
sam_v1_6_alignment_optionalfields_zopt = Maybe SAM_V1_6_Alignment_OptionalFields_ZOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_hopt :: Maybe SAM_V1_6_Alignment_OptionalFields_HOPT
sam_v1_6_alignment_optionalfields_hopt = Maybe SAM_V1_6_Alignment_OptionalFields_HOPT
forall a. Maybe a
Nothing
, sam_v1_6_alignment_optionalfields_bopt :: Maybe SAM_V1_6_Alignment_OptionalFields_BOPT
sam_v1_6_alignment_optionalfields_bopt = SAM_V1_6_Alignment_OptionalFields_BOPT
-> Maybe SAM_V1_6_Alignment_OptionalFields_BOPT
forall a. a -> Maybe a
Just SAM_V1_6_Alignment_OptionalFields_BOPT
parsedbs
}
SAM_V1_6_Alignment_OptionalFields
-> Seq SAM_V1_6_Alignment_OptionalFields
-> Seq SAM_V1_6_Alignment_OptionalFields
forall a. a -> Seq a -> Seq a
DSeq.:<|
ByteString -> Seq SAM_V1_6_Alignment_OptionalFields
parse_OptionalFields ( Int -> ByteString -> ByteString
DB.drop Int
1 (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$
(Word8 -> Bool) -> ByteString -> ByteString
DB.dropWhile (Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word8
0x09)
ByteString
bs
)
Bool
False ->
[Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq SAM_V1_6_Alignment_OptionalFields)
-> [Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Read_Error_Alignment_OptionalFields_Remaining_Bytes
Maybe Word8
_ ->
[Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a. HasCallStack => [Char] -> a
error ([Char] -> Seq SAM_V1_6_Alignment_OptionalFields)
-> [Char] -> Seq SAM_V1_6_Alignment_OptionalFields
forall a b. (a -> b) -> a -> b
$
SAM_V1_6_Error -> [Char]
forall a. Show a => a -> [Char]
show SAM_V1_6_Error
SAM_V1_6_Read_Error_Alignment_OptionalFields_BOPT_Missing_Type