module Iri.QuasiQuoter ( uri, httpUri, ) where import Iri.Prelude hiding (exp) import Iri.Data import Language.Haskell.TH.Syntax import Language.Haskell.TH.Quote import qualified Iri.Parsing.Attoparsec.ByteString as A import qualified Data.Attoparsec.ByteString as B import qualified Data.Attoparsec.Text as C import qualified Iri.Parsing.Attoparsec.Text as D exp :: (String -> Q Exp) -> QuasiQuoter exp exp = QuasiQuoter exp unsupported unsupported unsupported where unsupported _ = fail "Not supported" {-| IRI literal parsed from textual URI. -} uri :: QuasiQuoter uri = exp $ \ string -> case B.parseOnly (A.uri <* B.endOfInput) (fromString string) of Right iri -> lift iri Left error -> fail (showString "URI parsing: " error) {-| HTTP IRI literal parsed from textual URI. -} httpUri :: QuasiQuoter httpUri = exp $ \ string -> case B.parseOnly (A.httpUri <* B.endOfInput) (fromString string) of Right iri -> lift iri Left error -> fail (showString "HTTP URI parsing: " error) {-| IRI literal parsed from textual IRI. -} iri :: QuasiQuoter iri = exp $ \ string -> case C.parseOnly (D.iri <* C.endOfInput) (fromString string) of Right iri -> lift iri Left error -> fail (showString "IRI parsing: " error) {-| HTTP IRI literal parsed from textual IRI. -} httpIri :: QuasiQuoter httpIri = exp $ \ string -> case C.parseOnly (D.httpIri <* C.endOfInput) (fromString string) of Right iri -> lift iri Left error -> fail (showString "HTTP IRI parsing: " error)