module Components.Parsers.QueryParser (processString,validateQuery,parseStringToObjects) where
import Components.ObjectHandlers.ObjectsHandler (readServerObject, readFieldObject)
import Control.Exception (throw)
import Data.Char (toLower)
import Data.Foldable (foldl')
import Model.ServerExceptions (
QueryException(
ParseFragmentException,
EmptyQueryException,
InvalidObjectException,
FindFragmentException,
ReadDirectiveException,
MismatchedVariableTypeException,
InvalidVariableNameException,
InvalidScalarException,
TransformationSyntaxException
)
)
import Model.ServerObjectTypes (
NestedObject(..),
ServerObject,
Alias,
Name,
Argument,
Transformation,
ScalarType(..),
RootObjects,
RootObject,
SubFields,
InlinefragmentObject(..),
Field,
FieldObject,
SubSelection,
Fragment(..)
)
processString :: String -> String
processString :: String -> String
processString str :: String
str = String -> String
removeComments (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ String -> String
removeLinebreaks String
str
removeComments :: String -> String
str :: String
str = String -> Bool -> String
removeCommentsHelper String
str Bool
False
removeCommentsHelper :: String -> Bool -> String
('#':t :: String
t) _ = String -> Bool -> String
removeCommentsHelper String
t Bool
True
removeCommentsHelper ('\n':t :: String
t) _ = '\n'Char -> String -> String
forall a. a -> [a] -> [a]
:String -> Bool -> String
removeCommentsHelper String
t Bool
False
removeCommentsHelper (h :: Char
h:t :: String
t) False = Char
hChar -> String -> String
forall a. a -> [a] -> [a]
:String -> Bool -> String
removeCommentsHelper String
t Bool
False
removeCommentsHelper (_:t :: String
t) _ = String -> Bool -> String
removeCommentsHelper String
t Bool
True
removeCommentsHelper "" _ = ""
removeLinebreaks :: String -> String
removeLinebreaks :: String -> String
removeLinebreaks ('\n':t :: String
t) = ' 'Char -> String -> String
forall a. a -> [a] -> [a]
:String -> String
removeLinebreaks String
t
removeLinebreaks ('\r':t :: String
t) = String -> String
removeLinebreaks String
t
removeLinebreaks ('\t':t :: String
t) = ' 'Char -> String -> String
forall a. a -> [a] -> [a]
:String -> String
removeLinebreaks String
t
removeLinebreaks (h :: Char
h:t :: String
t) = Char
hChar -> String -> String
forall a. a -> [a] -> [a]
:String -> String
removeLinebreaks String
t
removeLinebreaks "" = ""
validateQuery :: String -> Bool
validateQuery :: String -> Bool
validateQuery "" = Bool
False
validateQuery str :: String
str = (String -> Bool
validateBracketLocationQuery String
str)Bool -> Bool -> Bool
&&(String -> Bool
validateNoEmptyBrackets String
str)
validateBracketLocationQuery :: String -> Bool
validateBracketLocationQuery :: String -> Bool
validateBracketLocationQuery str :: String
str = String -> Int -> Int -> Bool
validateBracketLocationQueryHelper String
str 0 0
validateBracketLocationQueryHelper :: String -> Int -> Int -> Bool
validateBracketLocationQueryHelper :: String -> Int -> Int -> Bool
validateBracketLocationQueryHelper ('{':t :: String
t) o :: Int
o c :: Int
c = String -> Int -> Int -> Bool
validateBracketLocationQueryHelper String
t (Int
oInt -> Int -> Int
forall a. Num a => a -> a -> a
+1) Int
c
validateBracketLocationQueryHelper ('}':t :: String
t) o :: Int
o c :: Int
c = if Int
oInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=Int
c then Bool
False else String -> Int -> Int -> Bool
validateBracketLocationQueryHelper String
t Int
o (Int
cInt -> Int -> Int
forall a. Num a => a -> a -> a
+1)
validateBracketLocationQueryHelper (_:t :: String
t) o :: Int
o c :: Int
c = String -> Int -> Int -> Bool
validateBracketLocationQueryHelper String
t Int
o Int
c
validateBracketLocationQueryHelper "" x :: Int
x y :: Int
y = (Int
xInt -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
y)
validateNoEmptyBrackets :: String -> Bool
validateNoEmptyBrackets :: String -> Bool
validateNoEmptyBrackets str :: String
str = String -> String -> [String] -> Bool
validateNoEmptyBracketsHelper String
str "" []
validateNoEmptyBracketsHelper :: String -> String -> [String] -> Bool
validateNoEmptyBracketsHelper :: String -> String -> [String] -> Bool
validateNoEmptyBracketsHelper (' ':b :: String
b) acc :: String
acc [] = String -> String -> [String] -> Bool
validateNoEmptyBracketsHelper String
b String
acc []
validateNoEmptyBracketsHelper (' ':b :: String
b) acc :: String
acc (i :: String
i:j :: [String]
j) = String -> String -> [String] -> Bool
validateNoEmptyBracketsHelper String
b String
acc (String
iString -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
j)
validateNoEmptyBracketsHelper ('{':b :: String
b) acc :: String
acc [] = String -> String -> [String] -> Bool
validateNoEmptyBracketsHelper String
b [] [String
acc]
validateNoEmptyBracketsHelper ('}':b :: String
b) acc :: String
acc [] = Bool
False
validateNoEmptyBracketsHelper (a :: Char
a:b :: String
b) acc :: String
acc [] = String -> String -> [String] -> Bool
validateNoEmptyBracketsHelper String
b (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
a]) []
validateNoEmptyBracketsHelper ('{':b :: String
b) acc :: String
acc (i :: String
i:j :: [String]
j) = if Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
(==) 0 (Int -> Bool) -> Int -> Bool
forall a b. (a -> b) -> a -> b
$ String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc then Bool
False else String -> String -> [String] -> Bool
validateNoEmptyBracketsHelper String
b [] (String
accString -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
iString -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
j)
validateNoEmptyBracketsHelper ('}':b :: String
b) acc :: String
acc (i :: String
i:j :: [String]
j) = if Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
(==) 0 (Int -> Bool) -> Int -> Bool
forall a b. (a -> b) -> a -> b
$ String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc then Bool
False else String -> String -> [String] -> Bool
validateNoEmptyBracketsHelper String
b String
i [String]
j
validateNoEmptyBracketsHelper (a :: Char
a:b :: String
b) acc :: String
acc (i :: String
i:j :: [String]
j) = String -> String -> [String] -> Bool
validateNoEmptyBracketsHelper String
b (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
a]) (String
iString -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
j)
validateNoEmptyBracketsHelper "" acc :: String
acc nst :: [String]
nst = Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
(>) 1 (Int -> Bool) -> Int -> Bool
forall a b. (a -> b) -> a -> b
$ [String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
nst
parseStringToObjects :: String -> [(String,[String])] -> [(String,[(String,[String])])] -> [(String,[String],[String])] -> [(String,String,String)] -> RootObjects
parseStringToObjects :: String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> RootObjects
parseStringToObjects [] _ _ _ _ = QueryException -> RootObjects
forall a e. Exception e => e -> a
throw QueryException
EmptyQueryException
parseStringToObjects str :: String
str svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa vars :: [(String, String, String)]
vars = String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> RootObjects
composeObjects String
qry [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fragments
where
(qry :: String
qry,fmts :: String
fmts) = String -> (String, String)
getQueryAndFragments String
str
fragments :: [Fragment]
fragments = String
-> [(String, [String])]
-> [(String, [String], [String])]
-> [Fragment]
parseFragments String
fmts [(String, [String])]
svrobjs [(String, [String], [String])]
soa
getQueryAndFragments :: String -> (String, String)
getQueryAndFragments :: String -> (String, String)
getQueryAndFragments str :: String
str = String -> Int -> Bool -> String -> String -> (String, String)
getQueryAndFragmentsHelper String
str 0 Bool
False "" ""
getQueryAndFragmentsHelper :: String -> Int -> Bool -> String -> String -> (String, String)
getQueryAndFragmentsHelper :: String -> Int -> Bool -> String -> String -> (String, String)
getQueryAndFragmentsHelper ('{':t :: String
t) l :: Int
l False q :: String
q f :: String
f = String -> Int -> Bool -> String -> String -> (String, String)
getQueryAndFragmentsHelper String
t (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
+1) Bool
False (String
qString -> String -> String
forall a. [a] -> [a] -> [a]
++"{") String
f
getQueryAndFragmentsHelper ('}':t :: String
t) 1 False q :: String
q f :: String
f = String -> Int -> Bool -> String -> String -> (String, String)
getQueryAndFragmentsHelper String
t 0 Bool
True (String
qString -> String -> String
forall a. [a] -> [a] -> [a]
++"}") String
f
getQueryAndFragmentsHelper ('}':t :: String
t) l :: Int
l False q :: String
q f :: String
f = String -> Int -> Bool -> String -> String -> (String, String)
getQueryAndFragmentsHelper String
t (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
-1) Bool
False (String
qString -> String -> String
forall a. [a] -> [a] -> [a]
++"}") String
f
getQueryAndFragmentsHelper (h :: Char
h:t :: String
t) l :: Int
l False q :: String
q f :: String
f = String -> Int -> Bool -> String -> String -> (String, String)
getQueryAndFragmentsHelper String
t Int
l Bool
False (String
qString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h]) String
f
getQueryAndFragmentsHelper (h :: Char
h:t :: String
t) l :: Int
l m :: Bool
m q :: String
q f :: String
f = String -> Int -> Bool -> String -> String -> (String, String)
getQueryAndFragmentsHelper String
t Int
l Bool
m String
q (String
fString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h])
getQueryAndFragmentsHelper "" _ _ x :: String
x y :: String
y = (String
x, String
y)
parseFragments :: String -> [(String,[String])] -> [(String,[String],[String])] -> [Fragment]
parseFragments :: String
-> [(String, [String])]
-> [(String, [String], [String])]
-> [Fragment]
parseFragments str :: String
str svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> String
-> Int
-> [Fragment]
-> [(String, [String])]
-> [(String, [String], [String])]
-> [Fragment]
parseFragmentsHelper String
str "" 0 [] [(String, [String])]
svrobjs [(String, [String], [String])]
soa
parseFragmentsHelper :: String -> String -> Int -> [Fragment] -> [(String,[String])] -> [(String,[String],[String])] -> [Fragment]
parseFragmentsHelper :: String
-> String
-> Int
-> [Fragment]
-> [(String, [String])]
-> [(String, [String], [String])]
-> [Fragment]
parseFragmentsHelper ('{':t :: String
t) acc :: String
acc l :: Int
l rslt :: [Fragment]
rslt svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> String
-> Int
-> [Fragment]
-> [(String, [String])]
-> [(String, [String], [String])]
-> [Fragment]
parseFragmentsHelper String
t (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++"{") (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
+1) [Fragment]
rslt [(String, [String])]
svrobjs [(String, [String], [String])]
soa
parseFragmentsHelper ('}':t :: String
t) acc :: String
acc 1 rslt :: [Fragment]
rslt svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> String
-> Int
-> [Fragment]
-> [(String, [String])]
-> [(String, [String], [String])]
-> [Fragment]
parseFragmentsHelper String
t [] 0 ((String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragment String
acc [(String, [String])]
svrobjs [(String, [String], [String])]
soa)Fragment -> [Fragment] -> [Fragment]
forall a. a -> [a] -> [a]
:[Fragment]
rslt) [(String, [String])]
svrobjs [(String, [String], [String])]
soa
parseFragmentsHelper ('}':t :: String
t) acc :: String
acc l :: Int
l rslt :: [Fragment]
rslt svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> String
-> Int
-> [Fragment]
-> [(String, [String])]
-> [(String, [String], [String])]
-> [Fragment]
parseFragmentsHelper String
t (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++"}") (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
-1) [Fragment]
rslt [(String, [String])]
svrobjs [(String, [String], [String])]
soa
parseFragmentsHelper (h :: Char
h:t :: String
t) acc :: String
acc l :: Int
l rslt :: [Fragment]
rslt svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> String
-> Int
-> [Fragment]
-> [(String, [String])]
-> [(String, [String], [String])]
-> [Fragment]
parseFragmentsHelper String
t (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h]) Int
l [Fragment]
rslt [(String, [String])]
svrobjs [(String, [String], [String])]
soa
parseFragmentsHelper "" _ _ rslt :: [Fragment]
rslt _ _ = [Fragment]
rslt
createFragment :: String -> [(String,[String])] -> [(String,[String],[String])] -> Fragment
createFragment :: String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragment str :: String
str svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
str 0 [] Bool
False Bool
False Bool
False Bool
False "" "" [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper :: String -> Int -> String -> Bool -> Bool -> Bool -> Bool -> String -> String -> [(String,[String])] -> [(String,[String],[String])] -> Fragment
createFragmentHelper :: String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper (' ':t :: String
t) 0 acc :: String
acc True True True True rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t 0 "" Bool
True Bool
True Bool
True Bool
True String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper ('{':t :: String
t) 0 acc :: String
acc True True True True rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t 1 "" Bool
True Bool
True Bool
True Bool
True String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (_:_) 0 _ True True True True _ _ _ _ = QueryException -> Fragment
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
createFragmentHelper ('{':t :: String
t) l :: Int
l acc :: String
acc True True True True rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
+1) (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++"{") Bool
True Bool
True Bool
True Bool
True String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper ('}':t :: String
t) l :: Int
l acc :: String
acc True True True True rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
-1) (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++"}") Bool
True Bool
True Bool
True Bool
True String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (' ':t :: String
t) l :: Int
l acc :: String
acc True True True True rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++" ") Bool
True Bool
True Bool
True Bool
True String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (')':t :: String
t) l :: Int
l acc :: String
acc True True True True rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++")") Bool
True Bool
True Bool
True Bool
True String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper ('(':t :: String
t) l :: Int
l acc :: String
acc True True True True rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++"(") Bool
True Bool
True Bool
True Bool
True String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (':':t :: String
t) l :: Int
l acc :: String
acc True True True True rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++":") Bool
True Bool
True Bool
True Bool
True String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper ('$':t :: String
t) l :: Int
l acc :: String
acc True True True True rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++"$") Bool
True Bool
True Bool
True Bool
True String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper ('@':t :: String
t) l :: Int
l acc :: String
acc True True True True rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++"@") Bool
True Bool
True Bool
True Bool
True String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (h :: Char
h:t :: String
t) l :: Int
l acc :: String
acc True True True True rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h]) Bool
True Bool
True Bool
True Bool
True String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (' ':t :: String
t) l :: Int
l "" True False a :: Bool
a o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "" Bool
True Bool
False Bool
a Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (' ':t :: String
t) l :: Int
l acc :: String
acc True False a :: Bool
a o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "" Bool
True Bool
True Bool
a Bool
o String
acc String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (h :: Char
h:t :: String
t) l :: Int
l acc :: String
acc True False a :: Bool
a o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = if (Char -> Bool
isValidFragmentNameChar Char
h)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
False then QueryException -> Fragment
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException else String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h]) Bool
True Bool
False Bool
a Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (' ':t :: String
t) l :: Int
l "" True True True False rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "" Bool
True Bool
True Bool
True Bool
False String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (h :: Char
h:t :: String
t) l :: Int
l "" True True True False rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = if (Char -> Int
forall a. Enum a => a -> Int
fromEnum Char
h)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=97Bool -> Bool -> Bool
||(Char -> Int
forall a. Enum a => a -> Int
fromEnum Char
h)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=122 then String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l [Char
h] Bool
True Bool
True Bool
True Bool
False String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa else QueryException -> Fragment
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
createFragmentHelper (' ':t :: String
t) l :: Int
l acc :: String
acc True True True False rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "" Bool
True Bool
True Bool
True Bool
True String
rst1 String
acc [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper ('{':t :: String
t) l :: Int
l acc :: String
acc True True True False rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
+1) "" Bool
True Bool
True Bool
True Bool
True String
rst1 String
acc [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (h :: Char
h:t :: String
t) l :: Int
l acc :: String
acc True True True False rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = if Char -> Bool
isValidIdentifierChar Char
h then String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h]) Bool
True Bool
True Bool
True Bool
False String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa else QueryException -> Fragment
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
createFragmentHelper ('f':t :: String
t) l :: Int
l "" False n :: Bool
n a :: Bool
a o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "f" Bool
False Bool
n Bool
a Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper ('r':t :: String
t) l :: Int
l "f" False n :: Bool
n a :: Bool
a o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "fr" Bool
False Bool
n Bool
a Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper ('a':t :: String
t) l :: Int
l "fr" False n :: Bool
n a :: Bool
a o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "fra" Bool
False Bool
n Bool
a Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper ('g':t :: String
t) l :: Int
l "fra" False n :: Bool
n a :: Bool
a o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "frag" Bool
False Bool
n Bool
a Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper ('m':t :: String
t) l :: Int
l "frag" False n :: Bool
n a :: Bool
a o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "fragm" Bool
False Bool
n Bool
a Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper ('e':t :: String
t) l :: Int
l "fragm" False n :: Bool
n a :: Bool
a o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "fragme" Bool
False Bool
n Bool
a Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper ('n':t :: String
t) l :: Int
l "fragme" False n :: Bool
n a :: Bool
a o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "fragmen" Bool
False Bool
n Bool
a Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper ('t':t :: String
t) l :: Int
l "fragmen" False n :: Bool
n a :: Bool
a o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "fragment" Bool
False Bool
n Bool
a Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (' ':t :: String
t) l :: Int
l "fragment" False n :: Bool
n a :: Bool
a o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "" Bool
True Bool
n Bool
a Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (' ':t :: String
t) l :: Int
l "" False n :: Bool
n a :: Bool
a o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "" Bool
False Bool
n Bool
a Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (_:_) _ _ False _ _ _ _ _ _ _ = QueryException -> Fragment
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
createFragmentHelper (' ':t :: String
t) l :: Int
l "" True True False o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "" Bool
True Bool
True Bool
False Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (' ':t :: String
t) l :: Int
l "on" True True False o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l "" Bool
True Bool
True Bool
True Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (' ':_) _ _ True True False _ _ _ _ _ = QueryException -> Fragment
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
createFragmentHelper ('o':t :: String
t) l :: Int
l acc :: String
acc True True False o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++"o") Bool
True Bool
True Bool
False Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper ('n':t :: String
t) l :: Int
l acc :: String
acc True True False o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = String
-> Int
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> String
-> String
-> [(String, [String])]
-> [(String, [String], [String])]
-> Fragment
createFragmentHelper String
t Int
l (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++"n") Bool
True Bool
True Bool
False Bool
o String
rst1 String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa
createFragmentHelper (_:_) _ _ True True False _ _ _ _ _ = QueryException -> Fragment
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
createFragmentHelper "" l :: Int
l acc :: String
acc d :: Bool
d n :: Bool
n a :: Bool
a o :: Bool
o rst1 :: String
rst1 rst2 :: String
rst2 svrobjs :: [(String, [String])]
svrobjs soa :: [(String, [String], [String])]
soa = if (Int
lInt -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==1Bool -> Bool -> Bool
&&Bool
dBool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
TrueBool -> Bool -> Bool
&&Bool
nBool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
TrueBool -> Bool -> Bool
&&Bool
aBool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
TrueBool -> Bool -> Bool
&&Bool
oBool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
True) then Fragment :: String -> String -> String -> Fragment
Fragment { name :: String
name=String
rst1,targetObject :: String
targetObject=(String
-> [(String, [String])] -> [(String, [String], [String])] -> String
readServerObject String
rst2 [(String, [String])]
svrobjs [(String, [String], [String])]
soa),replacement :: String
replacement=String
acc } else QueryException -> Fragment
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
isValidFragmentNameChar :: Char -> Bool
isValidFragmentNameChar :: Char -> Bool
isValidFragmentNameChar c :: Char
c = let num :: Int
num = Char -> Int
forall a. Enum a => a -> Int
fromEnum Char
c in (Int
numInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=65Bool -> Bool -> Bool
&&Int
numInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=90)Bool -> Bool -> Bool
||(Int
numInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=97Bool -> Bool -> Bool
&&Int
numInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=122)Bool -> Bool -> Bool
||(Int
numInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=48Bool -> Bool -> Bool
&&Int
numInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=57)Bool -> Bool -> Bool
||(Int
numInt -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==95)
isValidIdentifierChar :: Char -> Bool
isValidIdentifierChar :: Char -> Bool
isValidIdentifierChar c :: Char
c = let num :: Int
num = Char -> Int
forall a. Enum a => a -> Int
fromEnum Char
c in (Int
numInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=65Bool -> Bool -> Bool
&&Int
numInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=90)Bool -> Bool -> Bool
||(Int
numInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=97Bool -> Bool -> Bool
&&Int
numInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=122)Bool -> Bool -> Bool
||(Int
numInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=48Bool -> Bool -> Bool
&&Int
numInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=57)Bool -> Bool -> Bool
||(Int
numInt -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==95)Bool -> Bool -> Bool
||(Int
numInt -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==36)
splitSubject :: String -> String -> Int -> (String,String)
splitSubject :: String -> String -> Int -> (String, String)
splitSubject (h :: Char
h:t :: String
t) acc :: String
acc l :: Int
l
| Int
lInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<0 = (String
acc,Char
hChar -> String -> String
forall a. a -> [a] -> [a]
:String
t)
splitSubject ('{':t :: String
t) acc :: String
acc l :: Int
l = String -> String -> Int -> (String, String)
splitSubject String
t (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++"{") (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
+1)
splitSubject ('}':t :: String
t) acc :: String
acc l :: Int
l = String -> String -> Int -> (String, String)
splitSubject String
t (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++"}") (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
-1)
splitSubject (h :: Char
h:t :: String
t) acc :: String
acc l :: Int
l = String -> String -> Int -> (String, String)
splitSubject String
t (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h]) Int
l
splitSubject "" acc :: String
acc _ = (String
acc,"")
composeObjects :: String -> [(String,[String])] -> [(String,[(String,[String])])] -> [(String,[String],[String])] -> [(String,String,String)] -> [Fragment] -> RootObjects
composeObjects :: String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> RootObjects
composeObjects "" _ _ _ _ _ = QueryException -> RootObjects
forall a e. Exception e => e -> a
throw QueryException
EmptyQueryException
composeObjects str :: String
str svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts = String
-> Int
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> RootObjects
composeObjectsHelper String
str 0 [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fmts
composeObjectsHelper :: String -> Int -> [(String,[String])] -> [(String,[(String,[String])])] -> [(String,[String],[String])] -> [(String,String,String)] -> [Fragment] -> RootObjects
composeObjectsHelper :: String
-> Int
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> RootObjects
composeObjectsHelper ('{':t :: String
t) 0 svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts = String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> RootObjects
separateRootObjects (String -> String
extractLevel String
t) [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fmts
composeObjectsHelper (_:t :: String
t) l :: Int
l svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts = String
-> Int
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> RootObjects
composeObjectsHelper String
t Int
l [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fmts
composeObjectsHelper "" _ _ _ _ _ _ = QueryException -> RootObjects
forall a e. Exception e => e -> a
throw QueryException
EmptyQueryException
separateRootObjects :: String -> [(String,[String])] -> [(String,[(String,[String])])] -> [(String,[String],[String])] -> [(String,String,String)] -> [Fragment] -> [RootObject]
separateRootObjects :: String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> RootObjects
separateRootObjects str :: String
str svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts = String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> RootObjects
separateRootObjectsHelper String
str "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fmts
separateRootObjectsHelper :: String -> String -> [(String,[String])] -> [(String,[(String,[String])])] -> [(String,[String],[String])] -> [(String,String,String)] -> [Fragment] -> [RootObject]
separateRootObjectsHelper :: String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> RootObjects
separateRootObjectsHelper ('{':t :: String
t) acc :: String
acc svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts = ((String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> Maybe String
-> NestedObject
createNestedObject (String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
acc (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ '{'Char -> String -> String
forall a. a -> [a] -> [a]
:String
level) [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fmts Maybe String
forall a. Maybe a
Nothing) :: RootObject)NestedObject -> RootObjects -> RootObjects
forall a. a -> [a] -> [a]
:String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> RootObjects
separateRootObjectsHelper String
levelTail "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fmts
where
(level :: String
level,levelTail :: String
levelTail) = String -> String -> Int -> (String, String)
splitLevel String
t "" 0
separateRootObjectsHelper (',':t :: String
t) acc :: String
acc svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts = String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> RootObjects
separateRootObjectsHelper String
t String
acc [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fmts
separateRootObjectsHelper (h :: Char
h:t :: String
t) acc :: String
acc svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts = String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> RootObjects
separateRootObjectsHelper String
t (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h]) [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fmts
separateRootObjectsHelper "" _ _ _ _ _ _ = []
createNestedObject :: String -> [(String,[String])] -> [(String,[(String,[String])])] -> [(String,[String],[String])] -> [(String,String,String)] -> [Fragment] -> Maybe ServerObject -> NestedObject
createNestedObject :: String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> Maybe String
-> NestedObject
createNestedObject str :: String
str svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: Maybe String
sobj = String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> Maybe String
-> NestedObject
createNestedObjectHelper String
str "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fmts Maybe String
sobj
createNestedObjectHelper :: String -> String -> [(String,[String])] -> [(String,[(String,[String])])] -> [(String,[String],[String])] -> [(String,String,String)] -> [Fragment] -> Maybe ServerObject -> NestedObject
createNestedObjectHelper :: String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> Maybe String
-> NestedObject
createNestedObjectHelper ('{':t :: String
t) acc :: String
acc svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: Maybe String
sobj = Maybe String
-> String -> String -> SubSelection -> SubFields -> NestedObject
NestedObject (String -> Maybe String
parseAlias String
acc) (String -> String
parseName String
acc) String
serverObj (String -> SubSelection
parseSubSelection String
acc) ((String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFields (String -> String
extractLevel String
t) [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fmts String
serverObj) :: SubFields) :: RootObject
where
serverObj :: String
serverObj = String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Maybe String
-> String
parseServerObject String
acc [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Maybe String
sobj
createNestedObjectHelper (h :: Char
h:t :: String
t) acc :: String
acc svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: Maybe String
sobj = String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> Maybe String
-> NestedObject
createNestedObjectHelper String
t (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h]) [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fmts Maybe String
sobj
createNestedObjectHelper "" _ _ _ _ _ _ _ = QueryException -> NestedObject
forall a e. Exception e => e -> a
throw QueryException
InvalidObjectException
parseServerObject :: String -> [(String,[String])] -> [(String,[(String,[String])])] -> [(String,[String],[String])] -> Maybe ServerObject -> ServerObject
parseServerObject :: String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Maybe String
-> String
parseServerObject "" svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa Nothing = String
-> [(String, [String])] -> [(String, [String], [String])] -> String
readServerObject "" [(String, [String])]
svrobjs [(String, [String], [String])]
soa
parseServerObject str :: String
str svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa Nothing
| (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ':' String
str)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
TrueBool -> Bool -> Bool
&&(Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem '(' String
str)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
True = String
-> [(String, [String])] -> [(String, [String], [String])] -> String
readServerObject (String -> String
removeSpaces (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (String -> Char -> String) -> String -> String -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\y :: String
y x :: Char
x -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==':' then "" else (String
yString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
x])) "" ((Char -> String -> String) -> String -> String -> String
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\x :: Char
x y :: String
y -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
=='(' then "" else Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:String
y) "" String
str)) [(String, [String])]
svrobjs [(String, [String], [String])]
soa
| (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ':' String
str)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
True = String
-> [(String, [String])] -> [(String, [String], [String])] -> String
readServerObject (String -> String
removeSpaces (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (String -> Char -> String) -> String -> String -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\y :: String
y x :: Char
x -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==':' then "" else (String
yString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
x])) "" String
str) [(String, [String])]
svrobjs [(String, [String], [String])]
soa
| Bool
otherwise = String
-> [(String, [String])] -> [(String, [String], [String])] -> String
readServerObject (String -> String
removeSpaces String
str) [(String, [String])]
svrobjs [(String, [String], [String])]
soa
parseServerObject "" svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa (Just holder :: String
holder) = String
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> String
-> String
readFieldObject "" [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa String
holder
parseServerObject str :: String
str svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa (Just holder :: String
holder)
| (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ':' String
str)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
TrueBool -> Bool -> Bool
&&(Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem '(' String
str)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
True = String
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> String
-> String
readFieldObject (String -> String
removeSpaces (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (String -> Char -> String) -> String -> String -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\y :: String
y x :: Char
x -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==':' then "" else (String
yString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
x])) "" ((Char -> String -> String) -> String -> String -> String
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\x :: Char
x y :: String
y -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
=='(' then "" else Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:String
y) "" String
str)) [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa String
holder
| (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ':' String
str)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
True = String
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> String
-> String
readFieldObject (String -> String
removeSpaces (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (String -> Char -> String) -> String -> String -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\y :: String
y x :: Char
x -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==':' then "" else (String
yString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
x])) "" String
str) [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa String
holder
| Bool
otherwise = String
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> String
-> String
readFieldObject (String -> String
removeSpaces String
str) [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa String
holder
parseAlias :: String -> Alias
parseAlias :: String -> Maybe String
parseAlias "" = Maybe String
forall a. Maybe a
Nothing :: Alias
parseAlias str :: String
str
| (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ':' String
str)Bool -> Bool -> Bool
&&(Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem '(' String
str) = String -> Maybe String
parseAlias (String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$ (Char -> String -> String) -> String -> String -> String
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\x :: Char
x y :: String
y -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
=='(' then "" else Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:String
y) "" String
str
| (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ':' String
str) = String -> Maybe String
forall a. a -> Maybe a
Just (String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$ String -> String
removeSpaces (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (Char -> String -> String) -> String -> String -> String
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\x :: Char
x y :: String
y -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==':' then "" else Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:String
y) "" String
str
| Bool
otherwise = Maybe String
forall a. Maybe a
Nothing :: Alias
parseName :: String -> Name
parseName :: String -> String
parseName "" = ""
parseName str :: String
str
| (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ':' String
str)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
TrueBool -> Bool -> Bool
&&(Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem '(' String
str)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
True = String -> String
removeSpaces (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (String -> Char -> String) -> String -> String -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\y :: String
y x :: Char
x -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==':' then "" else (String
yString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
x])) "" ((Char -> String -> String) -> String -> String -> String
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\x :: Char
x y :: String
y -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
=='(' then "" else Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:String
y) "" String
str)
| (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ':' String
str)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
True = String -> String
removeSpaces (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (String -> Char -> String) -> String -> String -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\y :: String
y x :: Char
x -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==':' then "" else (String
yString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
x])) "" String
str
| Bool
otherwise = String -> String
removeSpaces String
str
parseSubSelection :: String -> SubSelection
parseSubSelection :: String -> SubSelection
parseSubSelection ('(':t :: String
t)
| (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ':' String
t)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
TrueBool -> Bool -> Bool
&&(Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ')' String
t)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
True = ScalarType -> SubSelection
forall a. a -> Maybe a
Just (Maybe String
-> String -> Maybe String -> Maybe String -> ScalarType
ScalarType (Maybe String
forall a. Maybe a
Nothing :: Alias) ((String -> String
removeSideSpaces ((Char -> String -> String) -> String -> String -> String
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\x :: Char
x y :: String
y -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==':' then "" else Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:String
y) "" String
t)) :: Name) (Maybe String
forall a. Maybe a
Nothing :: Transformation) ((String -> Maybe String
forall a. a -> Maybe a
Just (String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$ String -> String
removeSideSpaces (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (String -> Char -> String) -> String -> String -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\y :: String
y x :: Char
x -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==':' then "" else (String
yString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
x])) "" ((Char -> String -> String) -> String -> String -> String
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\x :: Char
x y :: String
y -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==')' then "" else Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:String
y) "" String
t)) :: Argument)) :: SubSelection
parseSubSelection (h :: Char
h:t :: String
t) = String -> SubSelection
parseSubSelection String
t
parseSubSelection "" = SubSelection
forall a. Maybe a
Nothing :: SubSelection
parseSubFields :: String -> [(String,[String])] -> [(String,[(String,[String])])] -> [(String,[String],[String])] -> [(String,String,String)] -> [Fragment] -> ServerObject -> [Field]
parseSubFields :: String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFields "" _ _ _ _ _ _ = []
parseSubFields str :: String
str svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: String
sobj = String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
str "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj
parseSubFieldsHelper :: String -> String -> String -> [(String,[String])] -> [(String,[(String,[String])])] -> [(String,[String],[String])] -> Bool -> [(String,String,String)] -> [Fragment] -> ServerObject -> [Field]
parseSubFieldsHelper :: String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper ('{':t :: String
t) acc1 :: String
acc1 acc2 :: String
acc2 svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa True vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: String
sobj
| (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc1)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 = (FieldObject -> Either ScalarType FieldObject
forall a b. b -> Either a b
Right (NestedObject -> FieldObject
forall a b. a -> Either a b
Left (String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> Maybe String
-> NestedObject
createNestedObject (String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
acc1 (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ '{'Char -> String -> String
forall a. a -> [a] -> [a]
:String
level) [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fmts (String -> Maybe String
forall a. a -> Maybe a
Just String
sobj)) :: FieldObject) :: Field)Either ScalarType FieldObject -> SubFields -> SubFields
forall a. a -> [a] -> [a]
:String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
levelTail "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj
| (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc2)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 = (FieldObject -> Either ScalarType FieldObject
forall a b. b -> Either a b
Right (NestedObject -> FieldObject
forall a b. a -> Either a b
Left (String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> Maybe String
-> NestedObject
createNestedObject (String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
acc2 (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ '{'Char -> String -> String
forall a. a -> [a] -> [a]
:String
level) [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fmts (String -> Maybe String
forall a. a -> Maybe a
Just String
sobj)) :: FieldObject) :: Field)Either ScalarType FieldObject -> SubFields -> SubFields
forall a. a -> [a] -> [a]
:String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
levelTail "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj
where
(level :: String
level,levelTail :: String
levelTail) = String -> String -> Int -> (String, String)
splitLevel String
t "" 0
parseSubFieldsHelper ('{':t :: String
t) acc1 :: String
acc1 acc2 :: String
acc2 svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa _ vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: String
sobj
| (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc1)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 = String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
levelTail "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj
| (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc2)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 = String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
levelTail "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj
where
(level :: String
level,levelTail :: String
levelTail) = String -> String -> Int -> (String, String)
splitLevel String
t "" 0
parseSubFieldsHelper ('}':t :: String
t) acc1 :: String
acc1 acc2 :: String
acc2 svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa inc :: Bool
inc vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: String
sobj = String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
t String
acc1 String
acc2 [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
inc [(String, String, String)]
vars [Fragment]
fmts String
sobj
parseSubFieldsHelper (':':t :: String
t) acc1 :: String
acc1 acc2 :: String
acc2 svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa inc :: Bool
inc vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: String
sobj = String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper (String -> String
removeLeadingSpaces String
t) (String
acc2String -> String -> String
forall a. [a] -> [a] -> [a]
++String
acc1String -> String -> String
forall a. [a] -> [a] -> [a]
++":") "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
inc [(String, String, String)]
vars [Fragment]
fmts String
sobj
parseSubFieldsHelper (' ':t :: String
t) acc1 :: String
acc1 acc2 :: String
acc2 svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa inc :: Bool
inc vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: String
sobj = if (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc1)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 then String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
t "" String
acc1 [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
inc [(String, String, String)]
vars [Fragment]
fmts String
sobj else String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
t String
acc1 String
acc2 [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
inc [(String, String, String)]
vars [Fragment]
fmts String
sobj
parseSubFieldsHelper (',':t :: String
t) acc1 :: String
acc1 acc2 :: String
acc2 svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa True vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: String
sobj
| (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc1)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 = (ScalarType -> Either ScalarType FieldObject
forall a b. a -> Either a b
Left (ScalarType -> Either ScalarType FieldObject)
-> ScalarType -> Either ScalarType FieldObject
forall a b. (a -> b) -> a -> b
$ String -> ScalarType
createScalarType String
acc1 :: Field)Either ScalarType FieldObject -> SubFields -> SubFields
forall a. a -> [a] -> [a]
:String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
t "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj
| (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc2)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 = (ScalarType -> Either ScalarType FieldObject
forall a b. a -> Either a b
Left (ScalarType -> Either ScalarType FieldObject)
-> ScalarType -> Either ScalarType FieldObject
forall a b. (a -> b) -> a -> b
$ String -> ScalarType
createScalarType String
acc2 :: Field)Either ScalarType FieldObject -> SubFields -> SubFields
forall a. a -> [a] -> [a]
:String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
t "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj
parseSubFieldsHelper (',':t :: String
t) acc1 :: String
acc1 acc2 :: String
acc2 svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa inc :: Bool
inc vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: String
sobj
| (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc1)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 = String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
t "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj
| (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc2)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 = String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
t "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj
| Bool
otherwise = String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
t String
acc1 String
acc2 [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
inc [(String, String, String)]
vars [Fragment]
fmts String
sobj
parseSubFieldsHelper ('(':t :: String
t) acc1 :: String
acc1 acc2 :: String
acc2 svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa inc :: Bool
inc vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: String
sobj
| (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc1)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 = String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
selectTail (String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
acc1 (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ '('Char -> String -> String
forall a. a -> [a] -> [a]
:String
subselect) "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
inc [(String, String, String)]
vars [Fragment]
fmts String
sobj
| (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc2)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 = String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
selectTail (String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
acc2 (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ '('Char -> String -> String
forall a. a -> [a] -> [a]
:String
subselect) "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
inc [(String, String, String)]
vars [Fragment]
fmts String
sobj
where
(subselect :: String
subselect,selectTail :: String
selectTail) = String -> (String, String)
getSubSelection String
t
parseSubFieldsHelper ('@':t :: String
t) acc1 :: String
acc1 acc2 :: String
acc2 svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa _ vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: String
sobj = if Bool
directive then String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
directiveTail String
acc1 String
acc2 [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj else String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
directiveTail String
acc1 String
acc2 [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
False [(String, String, String)]
vars [Fragment]
fmts String
sobj
where
(directive :: Bool
directive,directiveTail :: String
directiveTail) = String -> [(String, String, String)] -> (Bool, String)
checkDirective ('@'Char -> String -> String
forall a. a -> [a] -> [a]
:String
t) [(String, String, String)]
vars
parseSubFieldsHelper ('.':t :: String
t) acc1 :: String
acc1 acc2 :: String
acc2 svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa True vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: String
sobj
| (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc2)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 = if Bool
isInlineFragment then (ScalarType -> Either ScalarType FieldObject
forall a b. a -> Either a b
Left (ScalarType -> Either ScalarType FieldObject)
-> ScalarType -> Either ScalarType FieldObject
forall a b. (a -> b) -> a -> b
$ String -> ScalarType
createScalarType String
acc2 :: Field)Either ScalarType FieldObject -> SubFields -> SubFields
forall a. a -> [a] -> [a]
:(FieldObject -> Either ScalarType FieldObject
forall a b. b -> Either a b
Right (InlinefragmentObject -> FieldObject
forall a b. b -> Either a b
Right (String
-> String
-> [(String, String, String)]
-> [Fragment]
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> InlinefragmentObject
createInlinefragmentObject String
inlinefragmentBody String
inlinefragmentObj [(String, String, String)]
vars [Fragment]
fmts [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa) :: FieldObject) :: Field)Either ScalarType FieldObject -> SubFields -> SubFields
forall a. a -> [a] -> [a]
:String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
inlinefragmentTail "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj else String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper (String
fContentsString -> String -> String
forall a. [a] -> [a] -> [a]
++String
fragmentTail) "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj
where
(isInlineFragment :: Bool
isInlineFragment,inlinefragmentObj :: String
inlinefragmentObj,inlinefragmentBody :: String
inlinefragmentBody,inlinefragmentTail :: String
inlinefragmentTail) = String -> (Bool, String, String, String)
checkInlinefragment ('.'Char -> String -> String
forall a. a -> [a] -> [a]
:String
t)
(fragmentName :: String
fragmentName,fragmentTail :: String
fragmentTail) = String -> (String, String)
findFragment ('.'Char -> String -> String
forall a. a -> [a] -> [a]
:String
t)
fContents :: String
fContents = String -> String -> [Fragment] -> String
expandFragment String
fragmentName String
sobj [Fragment]
fmts
parseSubFieldsHelper ('.':t :: String
t) acc1 :: String
acc1 acc2 :: String
acc2 svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa inc :: Bool
inc vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: String
sobj
| (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc1)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 = String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
t (String
acc1String -> String -> String
forall a. [a] -> [a] -> [a]
++".") "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj
| (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc2)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 = if Bool
isInlineFragment then (FieldObject -> Either ScalarType FieldObject
forall a b. b -> Either a b
Right (InlinefragmentObject -> FieldObject
forall a b. b -> Either a b
Right (String
-> String
-> [(String, String, String)]
-> [Fragment]
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> InlinefragmentObject
createInlinefragmentObject String
inlinefragmentBody String
inlinefragmentObj [(String, String, String)]
vars [Fragment]
fmts [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa) :: FieldObject) :: Field)Either ScalarType FieldObject -> SubFields -> SubFields
forall a. a -> [a] -> [a]
:String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
inlinefragmentTail "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj else String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper (String
fContentsString -> String -> String
forall a. [a] -> [a] -> [a]
++String
fragmentTail) "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
inc [(String, String, String)]
vars [Fragment]
fmts String
sobj
| Bool
isInlineFragmentBool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
True = (FieldObject -> Either ScalarType FieldObject
forall a b. b -> Either a b
Right (InlinefragmentObject -> FieldObject
forall a b. b -> Either a b
Right (String
-> String
-> [(String, String, String)]
-> [Fragment]
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> InlinefragmentObject
createInlinefragmentObject String
inlinefragmentBody String
inlinefragmentObj [(String, String, String)]
vars [Fragment]
fmts [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa) :: FieldObject) :: Field)Either ScalarType FieldObject -> SubFields -> SubFields
forall a. a -> [a] -> [a]
:String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
inlinefragmentTail "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj
| Bool
otherwise = String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper (String
fContentsString -> String -> String
forall a. [a] -> [a] -> [a]
++String
fragmentTail) "" "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
inc [(String, String, String)]
vars [Fragment]
fmts String
sobj
where
(isInlineFragment :: Bool
isInlineFragment,inlinefragmentObj :: String
inlinefragmentObj,inlinefragmentBody :: String
inlinefragmentBody,inlinefragmentTail :: String
inlinefragmentTail) = String -> (Bool, String, String, String)
checkInlinefragment ('.'Char -> String -> String
forall a. a -> [a] -> [a]
:String
t)
(fragmentName :: String
fragmentName,fragmentTail :: String
fragmentTail) = String -> (String, String)
findFragment ('.'Char -> String -> String
forall a. a -> [a] -> [a]
:String
t)
fContents :: String
fContents = String -> String -> [Fragment] -> String
expandFragment String
fragmentName String
sobj [Fragment]
fmts
parseSubFieldsHelper (h :: Char
h:t :: String
t) acc1 :: String
acc1 acc2 :: String
acc2 svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa True vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: String
sobj
| (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc2)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 = (ScalarType -> Either ScalarType FieldObject
forall a b. a -> Either a b
Left (ScalarType -> Either ScalarType FieldObject)
-> ScalarType -> Either ScalarType FieldObject
forall a b. (a -> b) -> a -> b
$ String -> ScalarType
createScalarType String
acc2 :: Field)Either ScalarType FieldObject -> SubFields -> SubFields
forall a. a -> [a] -> [a]
:String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
t (String
acc1String -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h]) "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj
parseSubFieldsHelper (h :: Char
h:t :: String
t) acc1 :: String
acc1 acc2 :: String
acc2 svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa inc :: Bool
inc vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts sobj :: String
sobj = if (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
acc2)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>0 then String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
t (String
acc1String -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h]) "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
True [(String, String, String)]
vars [Fragment]
fmts String
sobj else String
-> String
-> String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> Bool
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFieldsHelper String
t (String
acc1String -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h]) "" [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa Bool
inc [(String, String, String)]
vars [Fragment]
fmts String
sobj
parseSubFieldsHelper "" "" "" _ _ _ _ _ _ _ = []
parseSubFieldsHelper "" "" acc :: String
acc _ _ _ True _ _ _ = [(ScalarType -> Either ScalarType FieldObject
forall a b. a -> Either a b
Left (ScalarType -> Either ScalarType FieldObject)
-> ScalarType -> Either ScalarType FieldObject
forall a b. (a -> b) -> a -> b
$ String -> ScalarType
createScalarType String
acc) :: Field]
parseSubFieldsHelper "" "" acc :: String
acc _ _ _ False _ _ _ = []
parseSubFieldsHelper "" acc :: String
acc "" _ _ _ True _ _ _ = [(ScalarType -> Either ScalarType FieldObject
forall a b. a -> Either a b
Left (ScalarType -> Either ScalarType FieldObject)
-> ScalarType -> Either ScalarType FieldObject
forall a b. (a -> b) -> a -> b
$ String -> ScalarType
createScalarType String
acc) :: Field]
parseSubFieldsHelper "" acc :: String
acc "" _ _ _ False _ _ _ = []
parseSubFieldsHelper "" acc1 :: String
acc1 acc2 :: String
acc2 _ _ _ True _ _ _ = (ScalarType -> Either ScalarType FieldObject
forall a b. a -> Either a b
Left (ScalarType -> Either ScalarType FieldObject)
-> ScalarType -> Either ScalarType FieldObject
forall a b. (a -> b) -> a -> b
$ String -> ScalarType
createScalarType (String
acc2String -> String -> String
forall a. [a] -> [a] -> [a]
++String
acc1))Either ScalarType FieldObject -> SubFields -> SubFields
forall a. a -> [a] -> [a]
:[]
parseSubFieldsHelper "" acc1 :: String
acc1 acc2 :: String
acc2 _ _ _ False _ _ _ = []
checkInlinefragment :: String -> (Bool,String,String,String)
checkInlinefragment :: String -> (Bool, String, String, String)
checkInlinefragment str :: String
str = String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper String
str "" Bool
False ""
checkInlinefragmentHelper :: String -> String -> Bool -> String -> (Bool,String,String,String)
checkInlinefragmentHelper :: String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper ('.':t :: String
t) "" sobj :: Bool
sobj obj :: String
obj = String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper String
t "." Bool
False ""
checkInlinefragmentHelper _ "" _ _ = QueryException -> (Bool, String, String, String)
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
checkInlinefragmentHelper ('.':t :: String
t) "." sobj :: Bool
sobj obj :: String
obj = String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper String
t ".." Bool
False ""
checkInlinefragmentHelper _ "." _ _ = QueryException -> (Bool, String, String, String)
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
checkInlinefragmentHelper ('.':t :: String
t) ".." sobj :: Bool
sobj obj :: String
obj = String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper String
t "..." Bool
False ""
checkInlinefragmentHelper _ ".." _ _ = QueryException -> (Bool, String, String, String)
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
checkInlinefragmentHelper (' ':t :: String
t) "..." sobj :: Bool
sobj obj :: String
obj = String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper String
t "... " Bool
False ""
checkInlinefragmentHelper (h :: Char
h:t :: String
t) "..." sobj :: Bool
sobj obj :: String
obj = (Bool
False,"","","..."String -> String -> String
forall a. [a] -> [a] -> [a]
++(Char
hChar -> String -> String
forall a. a -> [a] -> [a]
:String
t))
checkInlinefragmentHelper (' ':t :: String
t) "... " sobj :: Bool
sobj obj :: String
obj = String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper String
t "... " Bool
False ""
checkInlinefragmentHelper ('o':t :: String
t) "... " sobj :: Bool
sobj obj :: String
obj = String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper String
t "... o" Bool
False ""
checkInlinefragmentHelper _ "... " _ _ = QueryException -> (Bool, String, String, String)
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
checkInlinefragmentHelper ('n':t :: String
t) "... o" sobj :: Bool
sobj obj :: String
obj = String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper String
t "... on" Bool
False ""
checkInlinefragmentHelper _ "... o" _ _ = QueryException -> (Bool, String, String, String)
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
checkInlinefragmentHelper (' ':t :: String
t) "... on" sobj :: Bool
sobj obj :: String
obj = String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper String
t "... on " Bool
False ""
checkInlinefragmentHelper _ "... on" _ _ = QueryException -> (Bool, String, String, String)
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
checkInlinefragmentHelper (' ':t :: String
t) "... on " sobj :: Bool
sobj obj :: String
obj = String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper String
t "... on " Bool
False ""
checkInlinefragmentHelper (h :: Char
h:t :: String
t) "... on " sobj :: Bool
sobj obj :: String
obj
| (Int
numInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=97Bool -> Bool -> Bool
||Int
numInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=122) = String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper String
t ("... on "String -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h]) Bool
False [Char
h]
| Bool
otherwise = QueryException -> (Bool, String, String, String)
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
where
num :: Int
num = Char -> Int
forall a. Enum a => a -> Int
fromEnum Char
h
checkInlinefragmentHelper (h :: Char
h:t :: String
t) acc :: String
acc False obj :: String
obj
| Char -> Bool
isValidIdentifierChar Char
h = String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper String
t String
acc Bool
False (String
objString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h])
checkInlinefragmentHelper (' ':t :: String
t) acc :: String
acc False obj :: String
obj = String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper String
t String
acc Bool
True String
obj
checkInlinefragmentHelper (' ':t :: String
t) acc :: String
acc _ obj :: String
obj = String
-> String -> Bool -> String -> (Bool, String, String, String)
checkInlinefragmentHelper String
t String
acc Bool
True String
obj
checkInlinefragmentHelper ('{':t :: String
t) acc :: String
acc _ obj :: String
obj = (Bool
True,String
obj,String
contents,String
tail)
where
(contents :: String
contents,tail :: String
tail) = String -> String -> Int -> (String, String)
splitSubject String
t "" 0
checkInlinefragmentHelper "" _ _ _ = (Bool
False,"","","")
checkInlinefragmentHelper _ _ _ _ = QueryException -> (Bool, String, String, String)
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
createInlinefragmentObject :: String -> String -> [(String,String,String)] -> [Fragment] -> [(String,[String])] -> [(String,[(String,[String])])] -> [(String,[String],[String])] -> InlinefragmentObject
createInlinefragmentObject :: String
-> String
-> [(String, String, String)]
-> [Fragment]
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> InlinefragmentObject
createInlinefragmentObject bdy :: String
bdy obj :: String
obj vars :: [(String, String, String)]
vars fmts :: [Fragment]
fmts svrobjs :: [(String, [String])]
svrobjs sos :: [(String, [(String, [String])])]
sos soa :: [(String, [String], [String])]
soa = String -> SubFields -> InlinefragmentObject
InlinefragmentObject (String
-> [(String, [String])] -> [(String, [String], [String])] -> String
readServerObject String
obj [(String, [String])]
svrobjs [(String, [String], [String])]
soa) ((String
-> [(String, [String])]
-> [(String, [(String, [String])])]
-> [(String, [String], [String])]
-> [(String, String, String)]
-> [Fragment]
-> String
-> SubFields
parseSubFields String
bdy [(String, [String])]
svrobjs [(String, [(String, [String])])]
sos [(String, [String], [String])]
soa [(String, String, String)]
vars [Fragment]
fmts String
obj) :: SubFields)
findFragment :: String -> (String,String)
findFragment :: String -> (String, String)
findFragment "" = QueryException -> (String, String)
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
findFragment str :: String
str = String -> String -> (String, String)
findFragmentHelper String
str ""
findFragmentHelper :: String -> String -> (String,String)
findFragmentHelper :: String -> String -> (String, String)
findFragmentHelper (h :: Char
h:t :: String
t) ('.':'.':'.':acc :: String
acc)
| Char -> Bool
isValidFragmentNameChar Char
h = String -> String -> (String, String)
findFragmentHelper String
t (('.'Char -> String -> String
forall a. a -> [a] -> [a]
:'.'Char -> String -> String
forall a. a -> [a] -> [a]
:'.'Char -> String -> String
forall a. a -> [a] -> [a]
:String
acc)String -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h])
findFragmentHelper ('.':t :: String
t) "" = String -> String -> (String, String)
findFragmentHelper String
t "."
findFragmentHelper (_:_) "" = QueryException -> (String, String)
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
findFragmentHelper ('.':t :: String
t) "." = String -> String -> (String, String)
findFragmentHelper String
t ".."
findFragmentHelper (_:_) "." = QueryException -> (String, String)
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
findFragmentHelper ('.':t :: String
t) ".." = String -> String -> (String, String)
findFragmentHelper String
t "..."
findFragmentHelper (_:_) ".." = QueryException -> (String, String)
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
findFragmentHelper (' ':t :: String
t) acc :: String
acc = (String
acc,String
t)
findFragmentHelper "" acc :: String
acc = (String
acc,"")
findFragmentHelper _ _ = QueryException -> (String, String)
forall a e. Exception e => e -> a
throw QueryException
ParseFragmentException
expandFragment :: String -> ServerObject -> [Fragment] -> String
expandFragment :: String -> String -> [Fragment] -> String
expandFragment fnm :: String
fnm sobj :: String
sobj (h :: Fragment
h:t :: [Fragment]
t) = if (Fragment -> String
targetObject Fragment
h)String -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
sobjBool -> Bool -> Bool
&&String
fnmString -> String -> Bool
forall a. Eq a => a -> a -> Bool
==("..."String -> String -> String
forall a. [a] -> [a] -> [a]
++(Fragment -> String
name Fragment
h)) then Fragment -> String
replacement Fragment
h else String -> String -> [Fragment] -> String
expandFragment String
fnm String
sobj [Fragment]
t
expandFragment _ _ [] = QueryException -> String
forall a e. Exception e => e -> a
throw QueryException
FindFragmentException
removeLeadingSpaces :: String -> String
removeLeadingSpaces :: String -> String
removeLeadingSpaces (' ':t :: String
t) = String -> String
removeLeadingSpaces String
t
removeLeadingSpaces str :: String
str = String
str
getSubSelection :: String -> (String,String)
getSubSelection :: String -> (String, String)
getSubSelection str :: String
str = String -> String -> (String, String)
getSubSelectionHelper String
str ""
getSubSelectionHelper :: String -> String -> (String,String)
getSubSelectionHelper :: String -> String -> (String, String)
getSubSelectionHelper (')':t :: String
t) acc :: String
acc = (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++")", String
t)
getSubSelectionHelper (h :: Char
h:t :: String
t) acc :: String
acc = String -> String -> (String, String)
getSubSelectionHelper String
t (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h])
getSubSelectionHelper "" acc :: String
acc = ("","")
splitLevel :: String -> String -> Int -> (String,String)
splitLevel :: String -> String -> Int -> (String, String)
splitLevel (h :: Char
h:t :: String
t) acc :: String
acc l :: Int
l
| Int
lInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<0 = (String
acc,(Char
hChar -> String -> String
forall a. a -> [a] -> [a]
:String
t))
splitLevel ('{':t :: String
t) acc :: String
acc l :: Int
l = String -> String -> Int -> (String, String)
splitLevel String
t (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++"{") (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
+1)
splitLevel ('}':t :: String
t) acc :: String
acc l :: Int
l = String -> String -> Int -> (String, String)
splitLevel String
t (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++"}") (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
-1)
splitLevel (h :: Char
h:t :: String
t) acc :: String
acc l :: Int
l = String -> String -> Int -> (String, String)
splitLevel String
t (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h]) Int
l
splitLevel "" acc :: String
acc _ = (String
acc,[])
checkDirective :: String -> [(String,String,String)] -> (Bool, String)
checkDirective :: String -> [(String, String, String)] -> (Bool, String)
checkDirective qry :: String
qry vars :: [(String, String, String)]
vars = if (String -> Bool
isDirective String
qry)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
False then (Bool
True,String
qry) else (String, String, String)
-> [(String, String, String)] -> (Bool, String)
checkDirectiveHelper (String -> (String, String, String)
getDirective String
qry) [(String, String, String)]
vars
checkDirectiveHelper :: (String,String,String) -> [(String,String,String)] -> (Bool,String)
checkDirectiveHelper :: (String, String, String)
-> [(String, String, String)] -> (Bool, String)
checkDirectiveHelper (dir :: String
dir,(h :: Char
h:t :: String
t),tail :: String
tail) vars :: [(String, String, String)]
vars
| String
directiveString -> String -> Bool
forall a. Eq a => a -> a -> Bool
=="include"Bool -> Bool -> Bool
&&String
valueString -> String -> Bool
forall a. Eq a => a -> a -> Bool
=="true"=(Bool
True,String
tail)
| String
directiveString -> String -> Bool
forall a. Eq a => a -> a -> Bool
=="include"Bool -> Bool -> Bool
&&String
valueString -> String -> Bool
forall a. Eq a => a -> a -> Bool
=="false"=(Bool
False,String
tail)
| String
directiveString -> String -> Bool
forall a. Eq a => a -> a -> Bool
=="skip"Bool -> Bool -> Bool
&&String
valueString -> String -> Bool
forall a. Eq a => a -> a -> Bool
=="true"=(Bool
False,String
tail)
| String
directiveString -> String -> Bool
forall a. Eq a => a -> a -> Bool
=="skip"Bool -> Bool -> Bool
&&String
valueString -> String -> Bool
forall a. Eq a => a -> a -> Bool
=="false"=(Bool
True,String
tail)
| Bool
otherwise = QueryException -> (Bool, String)
forall a e. Exception e => e -> a
throw QueryException
ReadDirectiveException
where
directive :: String
directive = String -> String
toLowercase String
dir
value :: String
value = if Char
hChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
=='$' then String -> String
toLowercase (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [(String, String, String)] -> String -> String
getVariableValue [(String, String, String)]
vars (Char
hChar -> String -> String
forall a. a -> [a] -> [a]
:String
t) else String -> String
toLowercase (Char
hChar -> String -> String
forall a. a -> [a] -> [a]
:String
t)
isDirective :: String -> Bool
isDirective :: String -> Bool
isDirective (' ':t :: String
t) = String -> Bool
isDirective String
t
isDirective ('@':_) = Bool
True
isDirective _ = Bool
False
getDirective :: String -> (String,String,String)
getDirective :: String -> (String, String, String)
getDirective (' ':t :: String
t) = String -> (String, String, String)
getDirective String
t
getDirective ('@':t :: String
t) = (String
dir,String
val,String
tail)
where
dir :: String
dir = String -> String
removeSideSpaces (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (String -> Char -> String) -> String -> String -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\y :: String
y x :: Char
x -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
=='@' then "" else String
yString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
x]) "" (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ String -> Char -> String
getPrefix ('@'Char -> String -> String
forall a. a -> [a] -> [a]
:String
t) '('
val :: String
val = String -> String
removeSideSpaces (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (String -> Char -> String) -> String -> String -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\y :: String
y x :: Char
x -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==':' then "" else String
yString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
x]) "" (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ String -> Char -> String
getPrefix String
t ')'
tail :: String
tail = String -> Char -> String
getSuffix String
t ')'
getPrefix :: String -> Char -> String
getPrefix :: String -> Char -> String
getPrefix (h :: Char
h:t :: String
t) chr :: Char
chr = if Char
hChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==Char
chr then "" else Char
hChar -> String -> String
forall a. a -> [a] -> [a]
:String -> Char -> String
getPrefix String
t Char
chr
getPrefix "" _ = ""
getSuffix :: String -> Char -> String
getSuffix :: String -> Char -> String
getSuffix (h :: Char
h:t :: String
t) chr :: Char
chr = if Char
hChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==Char
chr then String
t else String -> Char -> String
getSuffix String
t Char
chr
getSuffix "" _ = ""
toLowercase :: String -> String
toLowercase :: String -> String
toLowercase str :: String
str = [Char -> Char
toLower Char
c | Char
c <- String
str]
getVariableValue :: [(String,String,String)] -> String -> String
getVariableValue :: [(String, String, String)] -> String -> String
getVariableValue ((name :: String
name,"Boolean",val :: String
val):t :: [(String, String, String)]
t) var :: String
var
| (String
nameString -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
var) = String
val
getVariableValue ((name :: String
name,typ :: String
typ,val :: String
val):t :: [(String, String, String)]
t) var :: String
var = if String
nameString -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
var then QueryException -> String
forall a e. Exception e => e -> a
throw QueryException
MismatchedVariableTypeException else [(String, String, String)] -> String -> String
getVariableValue [(String, String, String)]
t String
var
getVariableValue [] _ = QueryException -> String
forall a e. Exception e => e -> a
throw QueryException
InvalidVariableNameException
extractLevel :: String -> String
"" = ""
extractLevel str :: String
str = String -> Int -> String
extractLevelHelper String
str 0
extractLevelHelper :: String -> Int -> String
('{':t :: String
t) l :: Int
l = '{'Char -> String -> String
forall a. a -> [a] -> [a]
:String -> Int -> String
extractLevelHelper String
t (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
+1)
extractLevelHelper ('}':t :: String
t) 0 = ""
extractLevelHelper ('}':t :: String
t) l :: Int
l = '}'Char -> String -> String
forall a. a -> [a] -> [a]
:String -> Int -> String
extractLevelHelper String
t (Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
-1)
extractLevelHelper (h :: Char
h:t :: String
t) l :: Int
l = Char
hChar -> String -> String
forall a. a -> [a] -> [a]
:String -> Int -> String
extractLevelHelper String
t Int
l
extractLevelHelper "" _ = ""
removeSpaces :: String -> String
removeSpaces :: String -> String
removeSpaces str :: String
str = [Char
x | Char
x <- String
str, Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
/=' ']
createScalarType :: String -> ScalarType
createScalarType :: String -> ScalarType
createScalarType (h :: Char
h:t :: String
t) = Maybe String
-> String -> Maybe String -> Maybe String -> ScalarType
ScalarType (String -> Maybe String
parseAlias (Char
hChar -> String -> String
forall a. a -> [a] -> [a]
:String
t)) (String -> String
parseName (Char
hChar -> String -> String
forall a. a -> [a] -> [a]
:String
t)) (String -> Maybe String
parseTransformation (Char
hChar -> String -> String
forall a. a -> [a] -> [a]
:String
t)) (String -> Maybe String
parseArgument (Char
hChar -> String -> String
forall a. a -> [a] -> [a]
:String
t))
createScalarType "" = QueryException -> ScalarType
forall a e. Exception e => e -> a
throw QueryException
InvalidScalarException
parseTransformation :: String -> Transformation
parseTransformation :: String -> Maybe String
parseTransformation "" = Maybe String
forall a. Maybe a
Nothing :: Transformation
parseTransformation str :: String
str
| (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem '(' String
str)Bool -> Bool -> Bool
&&(Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ':' String
str) = (String -> Maybe String
forall a. a -> Maybe a
Just (String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$ String -> String
removeSideSpaces (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (Char -> String -> String) -> String -> String -> String
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\x :: Char
x y :: String
y -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==':' then "" else Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:String
y) "" (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (String -> Char -> String) -> String -> String -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\y :: String
y x :: Char
x -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
=='(' then "" else String
yString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
x]) "" String
str) :: Transformation
| (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem '(' String
str) = QueryException -> Maybe String
forall a e. Exception e => e -> a
throw QueryException
TransformationSyntaxException
| Bool
otherwise = Maybe String
forall a. Maybe a
Nothing :: Transformation
parseArgument :: String -> Argument
parseArgument :: String -> Maybe String
parseArgument "" = Maybe String
forall a. Maybe a
Nothing :: Argument
parseArgument str :: String
str
| (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ')' String
str)Bool -> Bool -> Bool
&&(Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ':' String
str) = (String -> Maybe String
forall a. a -> Maybe a
Just (String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$ String -> String
removeSideSpaces (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (Char -> String -> String) -> String -> String -> String
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\x :: Char
x y :: String
y -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==')' then "" else Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:String
y) "" (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (String -> Char -> String) -> String -> String -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\y :: String
y x :: Char
x -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==':' then "" else String
yString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
x]) "" String
str) :: Argument
| (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ')' String
str) = QueryException -> Maybe String
forall a e. Exception e => e -> a
throw QueryException
TransformationSyntaxException
| Bool
otherwise = Maybe String
forall a. Maybe a
Nothing :: Argument
removeSideSpaces :: String -> String
removeSideSpaces :: String -> String
removeSideSpaces str :: String
str = (String -> Char -> String) -> String -> String -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\y :: String
y x :: Char
x -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==' 'Bool -> Bool -> Bool
&&(String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
y)Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==0 then "" else String
yString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
x]) "" (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ (Char -> String -> String) -> String -> String -> String
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\x :: Char
x y :: String
y -> if Char
xChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==' 'Bool -> Bool -> Bool
&&(String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
y)Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==0 then "" else Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:String
y) "" String
str