{-# LANGUAGE OverloadedStrings #-}
module Hydra.Sources.Tier4.Langs.Json.Decoding where
import Prelude hiding ((++))
import qualified Data.List as L
import qualified Data.Map as M
import qualified Data.Set as S
import qualified Data.Maybe as Y
import Hydra.Dsl.Base as Base
import qualified Hydra.Dsl.Core as Core
import qualified Hydra.Dsl.Graph as Graph
import qualified Hydra.Dsl.Lib.Equality as Equality
import qualified Hydra.Dsl.Lib.Flows as Flows
import qualified Hydra.Dsl.Lib.Io as Io
import qualified Hydra.Dsl.Lib.Lists as Lists
import qualified Hydra.Dsl.Lib.Literals as Literals
import qualified Hydra.Dsl.Lib.Logic as Logic
import qualified Hydra.Dsl.Lib.Maps as Maps
import qualified Hydra.Dsl.Lib.Math as Math
import qualified Hydra.Dsl.Lib.Optionals as Optionals
import qualified Hydra.Dsl.Lib.Sets as Sets
import Hydra.Dsl.Lib.Strings as Strings
import qualified Hydra.Dsl.Module as Module
import qualified Hydra.Dsl.Terms as Terms
import qualified Hydra.Dsl.Types as Types
import Hydra.Sources.Tier2.All
import qualified Hydra.Json as Json
import Hydra.Sources.Tier0.Json
jsonDecodingModule :: Module
jsonDecodingModule :: Module
jsonDecodingModule = Namespace
-> [Element] -> [Module] -> [Module] -> Maybe String -> Module
Module (String -> Namespace
Namespace String
"hydra/langs/json/decoding") [Element]
elements
[Module
jsonModelModule, Module
hydraCoreModule] (Module
jsonModelModuleModule -> [Module] -> [Module]
forall a. a -> [a] -> [a]
:[Module]
tier0Modules) (Maybe String -> Module) -> Maybe String -> Module
forall a b. (a -> b) -> a -> b
$
String -> Maybe String
forall a. a -> Maybe a
Just String
"Decoding functions for JSON data"
where
elements :: [Element]
elements = [
Definition (Value -> Flow Any String) -> Element
forall a. Definition a -> Element
Base.el Definition (Value -> Flow Any String)
forall s. Definition (Value -> Flow s String)
decodeStringDef,
Definition (Value -> Flow Any Double) -> Element
forall a. Definition a -> Element
Base.el Definition (Value -> Flow Any Double)
forall s. Definition (Value -> Flow s Double)
decodeNumberDef,
Definition (Value -> Flow Any Bool) -> Element
forall a. Definition a -> Element
Base.el Definition (Value -> Flow Any Bool)
forall s. Definition (Value -> Flow s Bool)
decodeBooleanDef,
Definition ((Value -> Flow Any Any) -> Value -> Flow Any [Any])
-> Element
forall a. Definition a -> Element
Base.el Definition ((Value -> Flow Any Any) -> Value -> Flow Any [Any])
forall s a. Definition ((Value -> Flow s a) -> Value -> Flow s [a])
decodeArrayDef,
Definition (Value -> Flow Any (Map String Value)) -> Element
forall a. Definition a -> Element
Base.el Definition (Value -> Flow Any (Map String Value))
forall s. Definition (Value -> Flow s (Map String Value))
decodeObjectDef,
Definition
((Value -> Flow Any Any)
-> String -> Map String Value -> Flow Any Any)
-> Element
forall a. Definition a -> Element
Base.el Definition
((Value -> Flow Any Any)
-> String -> Map String Value -> Flow Any Any)
forall s a.
Definition
((Value -> Flow s a) -> String -> Map String Value -> Flow s a)
decodeFieldDef,
Definition
((Value -> Flow Any Any)
-> String -> Map String Value -> Flow Any (Maybe Any))
-> Element
forall a. Definition a -> Element
Base.el Definition
((Value -> Flow Any Any)
-> String -> Map String Value -> Flow Any (Maybe Any))
forall s a.
Definition
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
decodeOptionalFieldDef]
jsonDecodingDefinition :: String -> Datum a -> Definition a
jsonDecodingDefinition :: forall a. String -> Datum a -> Definition a
jsonDecodingDefinition String
label = Module -> String -> Datum a -> Definition a
forall a. Module -> String -> Datum a -> Definition a
definitionInModule Module
jsonDecodingModule (String
"decode" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
label)
valueT :: Type
valueT = Name -> Type
TypeVariable Name
Json._Value
decodeStringDef :: Definition (Json.Value -> Flow s String)
decodeStringDef :: forall s. Definition (Value -> Flow s String)
decodeStringDef = String
-> Datum (Value -> Flow s String)
-> Definition (Value -> Flow s String)
forall a. String -> Datum a -> Definition a
jsonDecodingDefinition String
"String" (Datum (Value -> Flow s String)
-> Definition (Value -> Flow s String))
-> Datum (Value -> Flow s String)
-> Definition (Value -> Flow s String)
forall a b. (a -> b) -> a -> b
$
Type
-> Type
-> Datum (Value -> Flow s String)
-> Datum (Value -> Flow s String)
forall a. Type -> Type -> Datum a -> Datum a
function Type
valueT (Type -> Type -> Type
flowT Type
sT Type
stringT) (Datum (Value -> Flow s String) -> Datum (Value -> Flow s String))
-> Datum (Value -> Flow s String) -> Datum (Value -> Flow s String)
forall a b. (a -> b) -> a -> b
$
Name
-> Maybe (Datum (Flow s String))
-> [Field]
-> Datum (Value -> Flow s String)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
Json._Value (Datum (Flow s String) -> Maybe (Datum (Flow s String))
forall a. a -> Maybe a
Just (Datum (Flow s String) -> Maybe (Datum (Flow s String)))
-> Datum (Flow s String) -> Maybe (Datum (Flow s String))
forall a b. (a -> b) -> a -> b
$ Datum (String -> Flow s String)
forall s x. Datum (String -> Flow s x)
Flows.fail Datum (String -> Flow s String)
-> Datum String -> Datum (Flow s String)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum String
"expected a string") [
Name
Json._Value_stringName -> Datum (Any -> Flow Any Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Any -> Flow Any Any)
forall x s. Datum (x -> Flow s x)
Flows.pure]
decodeNumberDef :: Definition (Json.Value -> Flow s Double)
decodeNumberDef :: forall s. Definition (Value -> Flow s Double)
decodeNumberDef = String
-> Datum (Value -> Flow s Double)
-> Definition (Value -> Flow s Double)
forall a. String -> Datum a -> Definition a
jsonDecodingDefinition String
"Number" (Datum (Value -> Flow s Double)
-> Definition (Value -> Flow s Double))
-> Datum (Value -> Flow s Double)
-> Definition (Value -> Flow s Double)
forall a b. (a -> b) -> a -> b
$
Type
-> Type
-> Datum (Value -> Flow s Double)
-> Datum (Value -> Flow s Double)
forall a. Type -> Type -> Datum a -> Datum a
function Type
valueT (Type -> Type -> Type
flowT Type
sT Type
Types.bigfloat) (Datum (Value -> Flow s Double) -> Datum (Value -> Flow s Double))
-> Datum (Value -> Flow s Double) -> Datum (Value -> Flow s Double)
forall a b. (a -> b) -> a -> b
$
Name
-> Maybe (Datum (Flow s Double))
-> [Field]
-> Datum (Value -> Flow s Double)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
Json._Value (Datum (Flow s Double) -> Maybe (Datum (Flow s Double))
forall a. a -> Maybe a
Just (Datum (Flow s Double) -> Maybe (Datum (Flow s Double)))
-> Datum (Flow s Double) -> Maybe (Datum (Flow s Double))
forall a b. (a -> b) -> a -> b
$ Datum (String -> Flow s Double)
forall s x. Datum (String -> Flow s x)
Flows.fail Datum (String -> Flow s Double)
-> Datum String -> Datum (Flow s Double)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum String
"expected a number") [
Name
Json._Value_numberName -> Datum (Any -> Flow Any Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Any -> Flow Any Any)
forall x s. Datum (x -> Flow s x)
Flows.pure]
decodeBooleanDef :: Definition (Json.Value -> Flow s Bool)
decodeBooleanDef :: forall s. Definition (Value -> Flow s Bool)
decodeBooleanDef = String
-> Datum (Value -> Flow s Bool)
-> Definition (Value -> Flow s Bool)
forall a. String -> Datum a -> Definition a
jsonDecodingDefinition String
"Boolean" (Datum (Value -> Flow s Bool) -> Definition (Value -> Flow s Bool))
-> Datum (Value -> Flow s Bool)
-> Definition (Value -> Flow s Bool)
forall a b. (a -> b) -> a -> b
$
Type
-> Type
-> Datum (Value -> Flow s Bool)
-> Datum (Value -> Flow s Bool)
forall a. Type -> Type -> Datum a -> Datum a
function Type
valueT (Type -> Type -> Type
flowT Type
sT Type
booleanT) (Datum (Value -> Flow s Bool) -> Datum (Value -> Flow s Bool))
-> Datum (Value -> Flow s Bool) -> Datum (Value -> Flow s Bool)
forall a b. (a -> b) -> a -> b
$
Name
-> Maybe (Datum (Flow s Bool))
-> [Field]
-> Datum (Value -> Flow s Bool)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
Json._Value (Datum (Flow s Bool) -> Maybe (Datum (Flow s Bool))
forall a. a -> Maybe a
Just (Datum (Flow s Bool) -> Maybe (Datum (Flow s Bool)))
-> Datum (Flow s Bool) -> Maybe (Datum (Flow s Bool))
forall a b. (a -> b) -> a -> b
$ Datum (String -> Flow s Bool)
forall s x. Datum (String -> Flow s x)
Flows.fail Datum (String -> Flow s Bool)
-> Datum String -> Datum (Flow s Bool)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum String
"expected a boolean") [
Name
Json._Value_booleanName -> Datum (Any -> Flow Any Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Any -> Flow Any Any)
forall x s. Datum (x -> Flow s x)
Flows.pure]
decodeArrayDef :: Definition ((Json.Value -> Flow s a) -> Json.Value -> Flow s [a])
decodeArrayDef :: forall s a. Definition ((Value -> Flow s a) -> Value -> Flow s [a])
decodeArrayDef = String
-> Datum ((Value -> Flow s a) -> Value -> Flow s [a])
-> Definition ((Value -> Flow s a) -> Value -> Flow s [a])
forall a. String -> Datum a -> Definition a
jsonDecodingDefinition String
"Array" (Datum ((Value -> Flow s a) -> Value -> Flow s [a])
-> Definition ((Value -> Flow s a) -> Value -> Flow s [a]))
-> Datum ((Value -> Flow s a) -> Value -> Flow s [a])
-> Definition ((Value -> Flow s a) -> Value -> Flow s [a])
forall a b. (a -> b) -> a -> b
$
Type
-> Type
-> Datum ((Value -> Flow s a) -> Value -> Flow s [a])
-> Datum ((Value -> Flow s a) -> Value -> Flow s [a])
forall a. Type -> Type -> Datum a -> Datum a
function (Type -> Type -> Type
funT Type
valueT (Type -> Type -> Type
flowT Type
sT Type
aT)) (Type -> Type -> Type
funT Type
valueT (Type -> Type -> Type
flowT Type
sT (Type -> Type
listT Type
aT))) (Datum ((Value -> Flow s a) -> Value -> Flow s [a])
-> Datum ((Value -> Flow s a) -> Value -> Flow s [a]))
-> Datum ((Value -> Flow s a) -> Value -> Flow s [a])
-> Datum ((Value -> Flow s a) -> Value -> Flow s [a])
forall a b. (a -> b) -> a -> b
$
String
-> Datum (Any -> Flow Any Any)
-> Datum ((Value -> Flow s a) -> Value -> Flow s [a])
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"decodeElem" (Datum (Any -> Flow Any Any)
-> Datum ((Value -> Flow s a) -> Value -> Flow s [a]))
-> Datum (Any -> Flow Any Any)
-> Datum ((Value -> Flow s a) -> Value -> Flow s [a])
forall a b. (a -> b) -> a -> b
$ Name
-> Maybe (Datum (Flow Any Any))
-> [Field]
-> Datum (Any -> Flow Any Any)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
Json._Value (Datum (Flow Any Any) -> Maybe (Datum (Flow Any Any))
forall a. a -> Maybe a
Just (Datum (Flow Any Any) -> Maybe (Datum (Flow Any Any)))
-> Datum (Flow Any Any) -> Maybe (Datum (Flow Any Any))
forall a b. (a -> b) -> a -> b
$ Datum (String -> Flow Any Any)
forall s x. Datum (String -> Flow s x)
Flows.fail Datum (String -> Flow Any Any)
-> Datum String -> Datum (Flow Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum String
"expected an array") [
Name
Json._Value_arrayName -> Datum ([Any] -> Flow Any [Any]) -> Field
forall a. Name -> Datum a -> Field
>>: Datum ((Any -> Flow Any Any) -> [Any] -> Flow Any [Any])
forall x s y. Datum ((x -> Flow s y) -> [x] -> Flow s [y])
Flows.mapList Datum ((Any -> Flow Any Any) -> [Any] -> Flow Any [Any])
-> Datum (Any -> Flow Any Any) -> Datum ([Any] -> Flow Any [Any])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (String -> Datum (Any -> Flow Any Any)
forall a. String -> Datum a
var String
"decodeElem")]
decodeObjectDef :: Definition (Json.Value -> Flow s (M.Map String Json.Value))
decodeObjectDef :: forall s. Definition (Value -> Flow s (Map String Value))
decodeObjectDef = String
-> Datum (Value -> Flow s (Map String Value))
-> Definition (Value -> Flow s (Map String Value))
forall a. String -> Datum a -> Definition a
jsonDecodingDefinition String
"Object" (Datum (Value -> Flow s (Map String Value))
-> Definition (Value -> Flow s (Map String Value)))
-> Datum (Value -> Flow s (Map String Value))
-> Definition (Value -> Flow s (Map String Value))
forall a b. (a -> b) -> a -> b
$
Type
-> Type
-> Datum (Value -> Flow s (Map String Value))
-> Datum (Value -> Flow s (Map String Value))
forall a. Type -> Type -> Datum a -> Datum a
function Type
valueT (Type -> Type -> Type
flowT Type
sT (Type -> Type -> Type
mapT Type
stringT Type
valueT)) (Datum (Value -> Flow s (Map String Value))
-> Datum (Value -> Flow s (Map String Value)))
-> Datum (Value -> Flow s (Map String Value))
-> Datum (Value -> Flow s (Map String Value))
forall a b. (a -> b) -> a -> b
$
Name
-> Maybe (Datum (Flow s (Map String Value)))
-> [Field]
-> Datum (Value -> Flow s (Map String Value))
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
Json._Value (Datum (Flow s (Map String Value))
-> Maybe (Datum (Flow s (Map String Value)))
forall a. a -> Maybe a
Just (Datum (Flow s (Map String Value))
-> Maybe (Datum (Flow s (Map String Value))))
-> Datum (Flow s (Map String Value))
-> Maybe (Datum (Flow s (Map String Value)))
forall a b. (a -> b) -> a -> b
$ Datum (String -> Flow s (Map String Value))
forall s x. Datum (String -> Flow s x)
Flows.fail Datum (String -> Flow s (Map String Value))
-> Datum String -> Datum (Flow s (Map String Value))
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum String
"expected an object") [
Name
Json._Value_objectName -> Datum (Any -> Flow Any Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Any -> Flow Any Any)
forall x s. Datum (x -> Flow s x)
Flows.pure]
decodeFieldDef :: Definition ((Json.Value -> Flow s a) -> String -> (M.Map String Json.Value) -> Flow s a)
decodeFieldDef :: forall s a.
Definition
((Value -> Flow s a) -> String -> Map String Value -> Flow s a)
decodeFieldDef = String
-> Datum
((Value -> Flow s a) -> String -> Map String Value -> Flow s a)
-> Definition
((Value -> Flow s a) -> String -> Map String Value -> Flow s a)
forall a. String -> Datum a -> Definition a
jsonDecodingDefinition String
"Field" (Datum
((Value -> Flow s a) -> String -> Map String Value -> Flow s a)
-> Definition
((Value -> Flow s a) -> String -> Map String Value -> Flow s a))
-> Datum
((Value -> Flow s a) -> String -> Map String Value -> Flow s a)
-> Definition
((Value -> Flow s a) -> String -> Map String Value -> Flow s a)
forall a b. (a -> b) -> a -> b
$
Type
-> Type
-> Datum
((Value -> Flow s a) -> String -> Map String Value -> Flow s a)
-> Datum
((Value -> Flow s a) -> String -> Map String Value -> Flow s a)
forall a. Type -> Type -> Datum a -> Datum a
function (Type -> Type -> Type
funT Type
valueT (Type -> Type -> Type
flowT Type
sT Type
aT)) (Type -> Type -> Type
funT Type
stringT (Type -> Type -> Type
funT (Type -> Type -> Type
mapT Type
stringT Type
valueT) (Type -> Type -> Type
flowT Type
sT Type
aT))) (Datum
((Value -> Flow s a) -> String -> Map String Value -> Flow s a)
-> Datum
((Value -> Flow s a) -> String -> Map String Value -> Flow s a))
-> Datum
((Value -> Flow s a) -> String -> Map String Value -> Flow s a)
-> Datum
((Value -> Flow s a) -> String -> Map String Value -> Flow s a)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (Any -> Any)
-> Datum
((Value -> Flow s a) -> String -> Map String Value -> Flow s a)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"decodeValue" (Datum (Any -> Any)
-> Datum
((Value -> Flow s a) -> String -> Map String Value -> Flow s a))
-> Datum (Any -> Any)
-> Datum
((Value -> Flow s a) -> String -> Map String Value -> Flow s a)
forall a b. (a -> b) -> a -> b
$ String -> Datum (Any -> Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"name" (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum (Flow Any Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"m" (Datum (Flow Any Any) -> Datum (Any -> Any))
-> Datum (Flow Any Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$
Datum
(Flow Any (Maybe Any)
-> (Maybe Any -> Flow Any Any) -> Flow Any Any)
forall s x y. Datum (Flow s x -> (x -> Flow s y) -> Flow s y)
Flows.bind
Datum
(Flow Any (Maybe Any)
-> (Maybe Any -> Flow Any Any) -> Flow Any Any)
-> Datum (Flow Any (Maybe Any))
-> Datum ((Maybe Any -> Flow Any Any) -> Flow Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Definition
((Value -> Flow Any Any)
-> String -> Map String Value -> Flow Any (Maybe Any))
-> Datum
((Value -> Flow Any Any)
-> String -> Map String Value -> Flow Any (Maybe Any))
forall a. Definition a -> Datum a
ref Definition
((Value -> Flow Any Any)
-> String -> Map String Value -> Flow Any (Maybe Any))
forall s a.
Definition
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
decodeOptionalFieldDef Datum
((Value -> Flow Any Any)
-> String -> Map String Value -> Flow Any (Maybe Any))
-> Datum (Value -> Flow Any Any)
-> Datum (String -> Map String Value -> Flow Any (Maybe Any))
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Value -> Flow Any Any)
forall a. String -> Datum a
var String
"decodeValue" Datum (String -> Map String Value -> Flow Any (Maybe Any))
-> Datum String -> Datum (Map String Value -> Flow Any (Maybe Any))
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum String
forall a. String -> Datum a
var String
"name" Datum (Map String Value -> Flow Any (Maybe Any))
-> Datum (Map String Value) -> Datum (Flow Any (Maybe Any))
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Map String Value)
forall a. String -> Datum a
var String
"m")
Datum ((Maybe Any -> Flow Any Any) -> Flow Any Any)
-> Datum (Maybe Any -> Flow Any Any) -> Datum (Flow Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Flow Any Any)
-> Datum (Any -> Flow Any Any) -> Datum (Maybe Any -> Flow Any Any)
forall b a. Datum b -> Datum (a -> b) -> Datum (Maybe a -> b)
matchOpt (Datum (String -> Flow Any Any)
forall s x. Datum (String -> Flow s x)
Flows.fail Datum (String -> Flow Any Any)
-> Datum String -> Datum (Flow Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum String
"missing field: " Datum String -> Datum String -> Datum String
++ String -> Datum String
forall a. String -> Datum a
var String
"name")) Datum (Any -> Flow Any Any)
forall x s. Datum (x -> Flow s x)
Flows.pure)
decodeOptionalFieldDef :: Definition ((Json.Value -> Flow s a) -> String -> (M.Map String Json.Value) -> Flow s (Maybe a))
decodeOptionalFieldDef :: forall s a.
Definition
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
decodeOptionalFieldDef = String
-> Datum
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
-> Definition
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
forall a. String -> Datum a -> Definition a
jsonDecodingDefinition String
"OptionalField" (Datum
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
-> Definition
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a)))
-> Datum
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
-> Definition
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
forall a b. (a -> b) -> a -> b
$
Type
-> Type
-> Datum
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
-> Datum
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
forall a. Type -> Type -> Datum a -> Datum a
function (Type -> Type -> Type
funT Type
valueT (Type -> Type -> Type
flowT Type
sT Type
aT)) (Type -> Type -> Type
funT Type
stringT (Type -> Type -> Type
funT (Type -> Type -> Type
mapT Type
stringT Type
valueT) (Type -> Type -> Type
flowT Type
sT (Type -> Type
Types.optional Type
aT)))) (Datum
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
-> Datum
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a)))
-> Datum
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
-> Datum
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
forall a b. (a -> b) -> a -> b
$
String
-> Datum (Any -> Any)
-> Datum
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"decodeValue" (Datum (Any -> Any)
-> Datum
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a)))
-> Datum (Any -> Any)
-> Datum
((Value -> Flow s a)
-> String -> Map String Value -> Flow s (Maybe a))
forall a b. (a -> b) -> a -> b
$ String -> Datum (Any -> Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"name" (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum (Flow Any Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"m" (Datum (Flow Any Any) -> Datum (Any -> Any))
-> Datum (Flow Any Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$
(Datum (Flow Any Any)
-> Datum (Any -> Flow Any Any) -> Datum (Maybe Any -> Flow Any Any)
forall b a. Datum b -> Datum (a -> b) -> Datum (Maybe a -> b)
matchOpt (Datum (Any -> Flow Any Any)
forall x s. Datum (x -> Flow s x)
Flows.pure Datum (Any -> Flow Any Any) -> Datum Any -> Datum (Flow Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum Any
forall x. Datum x
nothing) (String -> Datum (Flow Any Any) -> Datum (Any -> Flow Any Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"v" (Datum ((Any -> Any) -> Flow Any Any -> Flow Any Any)
forall x y s. Datum ((x -> y) -> Flow s x -> Flow s y)
Flows.map Datum ((Any -> Any) -> Flow Any Any -> Flow Any Any)
-> Datum (Any -> Any) -> Datum (Flow Any Any -> Flow Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (String -> Datum (Maybe Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"x" (Datum Any -> Datum (Maybe Any)
forall x. Datum x -> Datum (Maybe x)
just (Datum Any -> Datum (Maybe Any)) -> Datum Any -> Datum (Maybe Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any
forall a. String -> Datum a
var String
"x")) Datum (Flow Any Any -> Flow Any Any)
-> Datum (Flow Any Any) -> Datum (Flow Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (String -> Datum (Any -> Flow Any Any)
forall a. String -> Datum a
var String
"decodeValue" Datum (Any -> Flow Any Any) -> Datum Any -> Datum (Flow Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"v"))))
Datum (Maybe Any -> Flow Any Any)
-> Datum (Maybe Any) -> Datum (Flow Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Any -> Map Any Any -> Maybe Any)
forall k v. Datum (k -> Map k v -> Maybe v)
Maps.lookup Datum (Any -> Map Any Any -> Maybe Any)
-> Datum Any -> Datum (Map Any Any -> Maybe Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"name" Datum (Map Any Any -> Maybe Any)
-> Datum (Map Any Any) -> Datum (Maybe Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Map Any Any)
forall a. String -> Datum a
var String
"m")