-- | Query result records.
module Database.Bolty.Record
  ( Record
  , lookupField
  ) where

import           Data.Kind    (Type)
import qualified Data.Text   as T
import qualified Data.Vector as V

import           Database.Bolty.Value.Type (Bolt)


-- | A single result row: a vector of 'Bolt' values, one per column.
type Record :: Type
type Record = V.Vector Bolt


-- | Look up a field value by column name, given the column name vector
-- from the query's SuccessRun response.
lookupField :: V.Vector T.Text -> T.Text -> Record -> Maybe Bolt
lookupField :: Vector Text -> Text -> Record -> Maybe Bolt
lookupField Vector Text
columns Text
name Record
record =
  Text -> Vector Text -> Maybe Int
forall a. Eq a => a -> Vector a -> Maybe Int
V.elemIndex Text
name Vector Text
columns Maybe Int -> (Int -> Maybe Bolt) -> Maybe Bolt
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Record
record Record -> Int -> Maybe Bolt
forall a. Vector a -> Int -> Maybe a
V.!?)