content: {-# LINE 1 "ProtocolHandler.hs" #-}
  -- ------------------------------------------------------------
  --
  -- protocol handler functions
  -- configuration file
  -- real handler is generated with cpp
  
  module Text.XML.HXT.Parser.ProtocolHandler
      ( getProtocolHandler
      )
  
  where
  
  import Text.XML.HXT.DOM.XmlState
  
  -- ------------------------------------------------------------
  --
  -- file io and network
  
  import Data.Maybe
      ( fromMaybe
      )
  
  import Network.URI
      ( URI
      , uriScheme
      )
  
  import Text.XML.HXT.Parser.ProtocolHandlerFile
      ( getFileContents
      )
  
  
  import Text.XML.HXT.Parser.ProtocolHandlerHttpNativeOrCurl
      ( getHttpContentsNativeOrWithCurl
      )
  
  
  
  
  
  -- ------------------------------------------------------------
  --
  
  getProtocolHandler      :: String -> (URI -> XmlStateFilter a)
  getProtocolHandler proto
      = fromMaybe getUnsupported handler
        where
        handler  = lookup proto protocolHandler
  
  --
  -- the fall back protocol handler
  
  getUnsupported  :: URI -> XmlStateFilter a
  getUnsupported uri
      = addFatal ( "unsupported protocol "
                   ++ show (uriScheme uri)
                   ++ " in URI: "
                   ++ show uri
                 )
  
  -- ------------------------------------------------------------
  --
  -- the table of potocol handlers
  -- looked up in getProtocolHandler
  
  protocolHandler :: [(String, URI -> XmlStateFilter a)]
  protocolHandler
      = [ ("file", getFileContents)
        , ("http",
  
  
           getHttpContentsNativeOrWithCurl
  
  
  
  
          )
        ]
  
  -- ------------------------------------------------------------
  
  
  