module HaskellWorks.Data.Json.Internal.Standard.Cursor.Token ( jsonTokenAt ) where import Data.ByteString.Internal as BSI import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.Drop import HaskellWorks.Data.Json.Internal.Standard.Token.Tokenize import HaskellWorks.Data.Json.Standard.Cursor.Generic import HaskellWorks.Data.Positioning import HaskellWorks.Data.RankSelect.Base.Rank1 import HaskellWorks.Data.RankSelect.Base.Select1 import Prelude hiding (drop) import qualified Data.Attoparsec.ByteString.Char8 as ABC jsonTokenAt :: (Rank1 w, Select1 v, TestBit w) => GenericCursor ByteString v w -> Maybe (JsonToken String Double) jsonTokenAt :: forall w v. (Rank1 w, Select1 v, TestBit w) => GenericCursor ByteString v w -> Maybe (JsonToken String Double) jsonTokenAt GenericCursor ByteString v w k = if forall t v w. GenericCursor t v w -> w balancedParens GenericCursor ByteString v w k forall a. TestBit a => a -> Position -> Bool .?. Count -> Position lastPositionOf (forall t v w. GenericCursor t v w -> Count cursorRank GenericCursor ByteString v w k) then case forall a. Parser a -> ByteString -> Result a ABC.parse forall t s d. ParseJson t s d => Parser t (JsonToken s d) parseJsonToken (forall v. Drop v => Count -> v -> v drop (forall a. ToCount a => a -> Count toCount (forall w v s. (Rank1 w, Select1 v) => GenericCursor s v w -> Position jsonCursorPos GenericCursor ByteString v w k)) (forall t v w. GenericCursor t v w -> t cursorText GenericCursor ByteString v w k)) of ABC.Fail {} -> forall a. HasCallStack => String -> a error String "Failed to parse token in cursor" ABC.Partial ByteString -> IResult ByteString (JsonToken String Double) _ -> forall a. HasCallStack => String -> a error String "Failed to parse token in cursor" ABC.Done ByteString _ JsonToken String Double r -> forall a. a -> Maybe a Just JsonToken String Double r else forall a. Maybe a Nothing