From 88f41271eb3b90dc193e444df1b851db821e6c83 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Sat, 7 Dec 2024 18:50:48 +0100 Subject: [PATCH] Add String instances from ToGraphQL and FromGraphQL --- CHANGELOG.md | 8 ++++++ src/Language/GraphQL/Class.hs | 49 +++++++---------------------------- 2 files changed, 17 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f2c5a0..a2aaeeb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,13 @@ The format is based on and this project adheres to [Haskell Package Versioning Policy](https://pvp.haskell.org/). +## [Unreleased] +### Removed +- Deprecated `Language.GraphQL.Class.gql` (moved to `Language.GraphQL.TH`). + +### Added +- `String` instances from `ToGraphQL` and `FromGraphQL`. + ## [1.0.6.0] - 2024-12-06 ### Added - `Language.GraphQL.Class.gql` is moved to `Language.GraphQL.TH` where it was @@ -46,6 +53,7 @@ and this project adheres to - JSON serialization. - Test helpers. +[Unreleased]: https://git.caraus.tech/OSS/graphql-spice/compare/v1.0.6.0...master [1.0.6.0]: https://git.caraus.tech/OSS/graphql-spice/compare/v1.0.5.0...v1.0.6.0 [1.0.5.0]: https://git.caraus.tech/OSS/graphql-spice/compare/v1.0.4.0...v1.0.5.0 [1.0.4.0]: https://git.caraus.tech/OSS/graphql-spice/compare/v1.0.3.0...v1.0.4.0 diff --git a/src/Language/GraphQL/Class.hs b/src/Language/GraphQL/Class.hs index 67ae695..0711dba 100644 --- a/src/Language/GraphQL/Class.hs +++ b/src/Language/GraphQL/Class.hs @@ -14,7 +14,6 @@ module Language.GraphQL.Class , ToGraphQL(..) , deriveFromGraphQL , deriveToGraphQL - , gql ) where import Data.Int (Int8, Int16, Int32, Int64) @@ -47,7 +46,6 @@ import Language.Haskell.TH , Dec(..) , Exp(..) , Info(..) - , Lit(..) , Quote(..) , Name , Q @@ -75,7 +73,6 @@ import Language.Haskell.TH , litP , wildP ) -import Language.Haskell.TH.Quote (QuasiQuoter(..)) import Data.Foldable (Foldable(..)) import qualified Data.HashMap.Strict as HashMap import qualified Language.GraphQL.Type as Type @@ -110,6 +107,10 @@ instance ToGraphQL Text where toGraphQL = Type.String +instance ToGraphQL String + where + toGraphQL = Type.String . Text.pack + instance ToGraphQL Int where toGraphQL = Type.Int . fromIntegral @@ -222,6 +223,11 @@ instance FromGraphQL Text fromGraphQL (Type.String value) = Just value fromGraphQL _ = Nothing +instance FromGraphQL String + where + fromGraphQL (Type.String value) = Just $ Text.unpack value + fromGraphQL _ = Nothing + instance FromGraphQL Int where fromGraphQL = fromGraphQLToIntegral @@ -459,40 +465,3 @@ deriveToGraphQL typeName = do [ litE (stringL $ nameBase name') , [|toGraphQL $(varE alias)|] ] - -stripIndentation :: String -> String -stripIndentation code = reverse - $ dropWhile isLineBreak - $ reverse - $ unlines - $ indent spaces <$> lines' withoutLeadingNewlines - where - indent 0 xs = xs - indent count (' ' : xs) = indent (count - 1) xs - indent _ xs = xs - withoutLeadingNewlines = dropWhile isLineBreak code - spaces = length $ takeWhile (== ' ') withoutLeadingNewlines - lines' "" = [] - lines' string = - let (line, rest) = break isLineBreak string - reminder = - case rest of - [] -> [] - '\r' : '\n' : strippedString -> lines' strippedString - _ : strippedString -> lines' strippedString - in line : reminder - isLineBreak = flip any ['\n', '\r'] . (==) - --- | Removes leading and trailing newlines. Indentation of the first line is --- removed from each line of the string. -{-# DEPRECATED gql "Use Language.GraphQL.TH.gql instead" #-} -gql :: QuasiQuoter -gql = QuasiQuoter - { quoteExp = pure . LitE . StringL . stripIndentation - , quotePat = const - $ fail "Illegal gql QuasiQuote (allowed as expression only, used as a pattern)" - , quoteType = const - $ fail "Illegal gql QuasiQuote (allowed as expression only, used as a type)" - , quoteDec = const - $ fail "Illegal gql QuasiQuote (allowed as expression only, used as a declaration)" - }