{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ViewPatterns #-} module Network.DO.Droplets.Utils (publicIP, findByIdOrName) where import Data.IP import Data.Maybe import Network.DO.Types -- |Lookup (first) public IP for given @Droplet@, if any. publicIP :: Droplet -> Maybe IP publicIP (networks -> NoNetworks) = Nothing publicIP (networks -> Networks{..}) = ip_address <$> (listToMaybe $ filter ((== Public) . netType) v4) -- |Find the first droplet that matches given Id or name findByIdOrName :: String -> [ Droplet ] -> [ Droplet ] findByIdOrName label = filter (matchIdOrName idOrName) where idOrName = case readsPrec 10 label of (did,""):_ -> Left did _ -> Right label matchIdOrName (Left did) d = dropletId d == did matchIdOrName (Right dname) d = name d == dname