{-# LANGUAGE OverloadedStrings #-}
module Miso.Flow.Utils.Connections
( areConnectionMapsEqual
, handleConnectionChange
, getConnectionStatus
) where
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as M
import Prelude
import Miso.String (MisoString)
import Miso.Flow.Types
areConnectionMapsEqual
:: Maybe (Map MisoString HandleConnection)
-> Maybe (Map MisoString HandleConnection)
-> Bool
areConnectionMapsEqual :: Maybe (Map MisoString HandleConnection)
-> Maybe (Map MisoString HandleConnection) -> Bool
areConnectionMapsEqual Maybe (Map MisoString HandleConnection)
Nothing Maybe (Map MisoString HandleConnection)
Nothing = Bool
True
areConnectionMapsEqual (Just Map MisoString HandleConnection
a) (Just Map MisoString HandleConnection
b)
| Map MisoString HandleConnection -> Int
forall k a. Map k a -> Int
M.size Map MisoString HandleConnection
a Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Map MisoString HandleConnection -> Int
forall k a. Map k a -> Int
M.size Map MisoString HandleConnection
b = Bool
False
| Map MisoString HandleConnection -> Bool
forall k a. Map k a -> Bool
M.null Map MisoString HandleConnection
a Bool -> Bool -> Bool
&& Map MisoString HandleConnection -> Bool
forall k a. Map k a -> Bool
M.null Map MisoString HandleConnection
b = Bool
True
| Bool
otherwise = (MisoString -> Bool) -> [MisoString] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (MisoString -> Map MisoString HandleConnection -> Bool
forall k a. Ord k => k -> Map k a -> Bool
`M.member` Map MisoString HandleConnection
b) (Map MisoString HandleConnection -> [MisoString]
forall k a. Map k a -> [k]
M.keys Map MisoString HandleConnection
a)
areConnectionMapsEqual Maybe (Map MisoString HandleConnection)
_ Maybe (Map MisoString HandleConnection)
_ = Bool
False
handleConnectionChange
:: Map MisoString HandleConnection
-> Map MisoString HandleConnection
-> [HandleConnection]
handleConnectionChange :: Map MisoString HandleConnection
-> Map MisoString HandleConnection -> [HandleConnection]
handleConnectionChange Map MisoString HandleConnection
a Map MisoString HandleConnection
b =
[ HandleConnection
c | (MisoString
k, HandleConnection
c) <- Map MisoString HandleConnection -> [(MisoString, HandleConnection)]
forall k a. Map k a -> [(k, a)]
M.toList Map MisoString HandleConnection
a, Bool -> Bool
not (MisoString
k MisoString -> Map MisoString HandleConnection -> Bool
forall k a. Ord k => k -> Map k a -> Bool
`M.member` Map MisoString HandleConnection
b) ]
getConnectionStatus :: Maybe Bool -> Maybe MisoString
getConnectionStatus :: Maybe Bool -> Maybe MisoString
getConnectionStatus = \case
Maybe Bool
Nothing -> Maybe MisoString
forall a. Maybe a
Nothing
Just Bool
True -> MisoString -> Maybe MisoString
forall a. a -> Maybe a
Just MisoString
"valid"
Just Bool
False -> MisoString -> Maybe MisoString
forall a. a -> Maybe a
Just MisoString
"invalid"