module Network.XmlRpc.Introspect where

import           Network.XmlRpc.Client
import           Network.XmlRpc.Internals

type Signature = ([Type],Type)
type Help = String
type MethodInfo = (String,[Signature],Help)

-- Primitive introspection functions

listMethods :: String -> IO [String]
listMethods :: String -> IO [String]
listMethods String
url = forall a. Remote a => String -> String -> a
remote String
url String
"system.listMethods"

methodSignature :: String -> String -> IO [[String]]
methodSignature :: String -> String -> IO [[String]]
methodSignature String
url = forall a. Remote a => String -> String -> a
remote String
url String
"system.methodSignature"

methodHelp :: String -> String -> IO String
methodHelp :: String -> String -> IO String
methodHelp String
url = forall a. Remote a => String -> String -> a
remote String
url String
"system.methodHelp"


signatures :: String -> String -> IO [Signature]
signatures :: String -> String -> IO [Signature]
signatures String
url String
name = do
                      [[String]]
sigs <- String -> String -> IO [[String]]
methodSignature String
url String
name
                      forall (m :: * -> *) a. Monad m => a -> m a
return [ (forall a b. (a -> b) -> [a] -> [b]
map forall a. Read a => String -> a
read [String]
as,forall a. Read a => String -> a
read String
r) | (String
r:[String]
as) <- [[String]]
sigs ]

methodInfo :: String -> String -> IO MethodInfo
methodInfo :: String -> String -> IO MethodInfo
methodInfo String
url String
name = do
                      [Signature]
sigs <- String -> String -> IO [Signature]
signatures String
url String
name
                      String
help <- String -> String -> IO String
methodHelp String
url String
name
                      forall (m :: * -> *) a. Monad m => a -> m a
return (String
name, [Signature]
sigs, String
help)