{-# LANGUAGE BangPatterns        #-}
{-# LANGUAGE FlexibleInstances   #-}
{-# LANGUAGE ScopedTypeVariables #-}

module HaskellWorks.Data.Json.Standard.Load.Partial
  ( loadPartial
  , loadPartialWithCsPoppyIndex
  , loadPartialWithIndex
  ) where

import HaskellWorks.Data.BalancedParens.Simple
import HaskellWorks.Data.Bits.BitShown
import HaskellWorks.Data.Json.Internal.PartialIndex
import HaskellWorks.Data.Json.PartialValue
import HaskellWorks.Data.Json.Standard.Cursor.Generic
import HaskellWorks.Data.Json.Standard.Cursor.Load.Raw
import HaskellWorks.Data.RankSelect.CsPoppy

loadPartialWithIndex :: String -> IO JsonPartialValue
loadPartialWithIndex :: String -> IO JsonPartialValue
loadPartialWithIndex String
filename = do
  (ByteString
jsonBS, Vector Word64
jsonIb, Vector Word64
jsonBp) <- String -> IO (ByteString, Vector Word64, Vector Word64)
loadRawWithIndex String
filename
  let cursor :: GenericCursor
  ByteString
  (BitShown (Vector Word64))
  (SimpleBalancedParens (Vector Word64))
cursor = forall t v w. t -> v -> w -> Word64 -> GenericCursor t v w
GenericCursor ByteString
jsonBS (forall a. a -> BitShown a
BitShown Vector Word64
jsonIb) (forall a. a -> SimpleBalancedParens a
SimpleBalancedParens Vector Word64
jsonBp) Word64
1
  let !jsonResult :: JsonPartialValue
jsonResult = forall a. JsonPartialValueAt a => a -> JsonPartialValue
jsonPartialJsonValueAt (forall a. JsonPartialIndexAt a => a -> JsonPartialIndex
jsonPartialIndexAt GenericCursor
  ByteString
  (BitShown (Vector Word64))
  (SimpleBalancedParens (Vector Word64))
cursor)
  forall (m :: * -> *) a. Monad m => a -> m a
return JsonPartialValue
jsonResult

loadPartialWithCsPoppyIndex :: String -> IO JsonPartialValue
loadPartialWithCsPoppyIndex :: String -> IO JsonPartialValue
loadPartialWithCsPoppyIndex String
filename = do
  (ByteString
jsonBS, Vector Word64
jsonIb, Vector Word64
jsonBp) <- String -> IO (ByteString, Vector Word64, Vector Word64)
loadRawWithIndex String
filename
  let cursor :: GenericCursor
  ByteString CsPoppy (SimpleBalancedParens (Vector Word64))
cursor = forall t v w. t -> v -> w -> Word64 -> GenericCursor t v w
GenericCursor ByteString
jsonBS (Vector Word64 -> CsPoppy
makeCsPoppy Vector Word64
jsonIb) (forall a. a -> SimpleBalancedParens a
SimpleBalancedParens Vector Word64
jsonBp) Word64
1
  let !jsonResult :: JsonPartialValue
jsonResult = forall a. JsonPartialValueAt a => a -> JsonPartialValue
jsonPartialJsonValueAt (forall a. JsonPartialIndexAt a => a -> JsonPartialIndex
jsonPartialIndexAt GenericCursor
  ByteString CsPoppy (SimpleBalancedParens (Vector Word64))
cursor)
  forall (m :: * -> *) a. Monad m => a -> m a
return JsonPartialValue
jsonResult

loadPartial :: String -> IO JsonPartialValue
loadPartial :: String -> IO JsonPartialValue
loadPartial = String -> IO JsonPartialValue
loadPartialWithCsPoppyIndex