module Free.Agent.Json
(
objLookup,
arrToList,
textAt,
numAt,
boolAt,
intAt,
jtext,
jnum,
jbool,
jobject,
jarray,
encodeJsonText,
)
where
import Circuit.Parser.Json (Json (..), encodeJson)
import Data.Scientific (Scientific, toBoundedInteger, toRealFloat)
import Data.Text (Text)
import Data.Text qualified as T
import Data.Text.Encoding (decodeUtf8)
import Data.Vector qualified as V
objLookup :: Text -> Json -> Maybe Json
objLookup :: Text -> Json -> Maybe Json
objLookup Text
k (JObject [(Text, Json)]
ps) = Text -> [(Text, Json)] -> Maybe Json
forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup Text
k [(Text, Json)]
ps
objLookup Text
_ Json
_ = Maybe Json
forall a. Maybe a
Nothing
arrToList :: Json -> [Json]
arrToList :: Json -> [Json]
arrToList (JArray Vector Json
v) = Vector Json -> [Json]
forall a. Vector a -> [a]
V.toList Vector Json
v
arrToList Json
_ = []
textAt :: Text -> Json -> Maybe Text
textAt :: Text -> Json -> Maybe Text
textAt Text
k Json
j = case Text -> Json -> Maybe Json
objLookup Text
k Json
j of
Just (JString Text
t) -> Text -> Maybe Text
forall a. a -> Maybe a
Just Text
t
Maybe Json
_ -> Maybe Text
forall a. Maybe a
Nothing
numAt :: Text -> Json -> Maybe Scientific
numAt :: Text -> Json -> Maybe Scientific
numAt Text
k Json
j = case Text -> Json -> Maybe Json
objLookup Text
k Json
j of
Just (JNumber Scientific
n) -> Scientific -> Maybe Scientific
forall a. a -> Maybe a
Just Scientific
n
Maybe Json
_ -> Maybe Scientific
forall a. Maybe a
Nothing
boolAt :: Text -> Json -> Maybe Bool
boolAt :: Text -> Json -> Maybe Bool
boolAt Text
k Json
j = case Text -> Json -> Maybe Json
objLookup Text
k Json
j of
Just (JBool Bool
b) -> Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
b
Maybe Json
_ -> Maybe Bool
forall a. Maybe a
Nothing
intAt :: Text -> Json -> Maybe Int
intAt :: Text -> Json -> Maybe Int
intAt Text
k Json
j = Text -> Json -> Maybe Scientific
numAt Text
k Json
j Maybe Scientific -> (Scientific -> Maybe Int) -> Maybe Int
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Scientific -> Maybe Int
forall i. (Integral i, Bounded i) => Scientific -> Maybe i
toBoundedInteger
jtext :: Text -> Json
jtext :: Text -> Json
jtext = Text -> Json
JString
jnum :: (Integral a) => a -> Json
jnum :: forall a. Integral a => a -> Json
jnum = Scientific -> Json
JNumber (Scientific -> Json) -> (a -> Scientific) -> a -> Json
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Scientific
forall a b. (Integral a, Num b) => a -> b
fromIntegral
jbool :: Bool -> Json
jbool :: Bool -> Json
jbool = Bool -> Json
JBool
jobject :: [(Text, Json)] -> Json
jobject :: [(Text, Json)] -> Json
jobject = [(Text, Json)] -> Json
JObject
jarray :: [Json] -> Json
jarray :: [Json] -> Json
jarray = Vector Json -> Json
JArray (Vector Json -> Json) -> ([Json] -> Vector Json) -> [Json] -> Json
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Json] -> Vector Json
forall a. [a] -> Vector a
V.fromList
encodeJsonText :: Json -> Text
encodeJsonText :: Json -> Text
encodeJsonText = ByteString -> Text
decodeUtf8 (ByteString -> Text) -> (Json -> ByteString) -> Json -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Json -> ByteString
encodeJson