module Strelka.Executor where

import Strelka.Prelude
import Strelka.Model
import qualified Strelka.RequestParser as A
import qualified Strelka.ResponseBuilder as B
import qualified Data.Text as C
import qualified Data.Text.Encoding as D
import qualified Data.Text.Encoding.Error as E


route :: Monad m => Request -> A.RequestParser m B.ResponseBuilder -> m (Either Text Response)
route request route =
  (liftM . liftM) (B.run . fst) (A.run route request segments)
  where
    segments =
      case request of
        Request _ (Path pathBytes) _ _ _ ->
          filter (not . C.null) (C.splitOn "/" (D.decodeUtf8With E.lenientDecode pathBytes))