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