module Hspec.Utils ( module Test.Hspec , module Test.Tasty , module Test.Tasty.Hspec , ($), (.) , Functor(..), (<$>) , Applicative(..) , Monad(..), (=<<) , Semigroup(..) , IO ) where import Data.Bool import Data.Eq (Eq(..)) import Data.Ord (Ord(..)) import Data.Semigroup (Semigroup(..)) import Control.Applicative (Applicative(..)) import Control.Monad (Monad(..), (=<<)) import Data.Either (Either(..)) import Data.Function (($), (.)) import Data.Functor (Functor(..), (<$>)) import Data.Proxy (Proxy(..)) import Data.Semigroup (Semigroup(..)) import System.IO (IO) import Test.Hspec import Test.Tasty import Test.Tasty.Hspec import Text.Show (Show(..), showString, showParen, ShowS) import Data.String (String) import Symantic.HTTP import Symantic.HTTP.Server import qualified Data.Map.Strict as Map import qualified Data.Map.Merge.Strict as Map import Data.Function (const) import qualified Debug.Trace as Dbg import qualified Data.Text as Text instance (repr ~ Server) => Show (Router repr a b) where showsPrec p = \case Router_Any{} -> showString "X" Router_Map ms -> showParen (p>10) $ showString "map " . showsPrec p (Map.toList ms) Router_Seg s -> showsPrec 10 s Router_Cat x y -> showParen (p>4) $ showsPrec 4 x . showString " <.> " . showsPrec 4 y Router_Alt x y -> showParen (p>3) $ showsPrec 3 x . showString " " . showsPrec 3 y Router_AltL x -> showParen (p>4) $ showString "L " . showsPrec 10 x Router_AltR x -> showParen (p>4) $ showString "R " . showsPrec 10 x Router_Cap n -> showString (":"<>n) -- Router_CapAlt xn x yn y -> showString (":"<>xn<>"|"<>yn<>" ") . showsPrec p (router_Alt x y) Router_Caps cs -> showParen (p>10) $ showString "cap (" . go cs . showString ")" where go :: Captures cs -> ShowS go (Captures0 a n) = showString (":"<>n) go (Captures2 x y) = showParen True $ go x . showString " | " . go y