{-# OPTIONS_GHC -fno-warn-orphans #-} module System.Tianbar.Plugin.DBus.FromData () where import Data.List.Split import Data.Maybe import DBus import DBus.Client import System.Tianbar.Plugin instance FromData MatchRule where fromData = do objPath <- fromData iface <- fromData memberName <- fromData return $ matchAny { matchSender = Nothing , matchDestination = Nothing , matchPath = objPath , matchInterface = iface , matchMember = memberName } instance FromData MethodCall where fromData = do callPath <- fromData iface <- fromData member <- fromData callBody <- map variantFromString <$> looks "body[]" dest <- fromData let setBodyDest mcall = mcall { methodCallBody = callBody , methodCallDestination = dest } return $ setBodyDest $ methodCall callPath iface member instance FromData ObjectPath where fromData = fromJust . parseObjectPath <$> look "path" instance FromData InterfaceName where fromData = fromJust . parseInterfaceName <$> look "iface" instance FromData MemberName where fromData = fromJust . parseMemberName <$> look "member" instance FromData BusName where fromData = fromJust . parseBusName <$> look "destination" variantFromString :: String -> Variant variantFromString param = case splitOn ":" param of ["string", str] -> toVariant str _ -> error $ "Invalid variant string: " ++ show param