-- | -- Module : Robotics.ROS.Pkg.Msgs -- Copyright : Alexander Krupenkin 2016 -- License : BSD3 -- -- Maintainer : mail@akru.me -- Stability : experimental -- Portability : POSIX / WIN32 -- -- ROS messages placed on "msg" directory in package root. This -- package contains its directory observer for given package. -- module Robotics.ROS.Pkg.Msgs ( -- ** Single package request pkgMessages -- ** All-in-one request , messageList ) where import System.FilePath (takeExtension, joinPath) import System.Directory (doesDirectoryExist, getDirectoryContents) import Robotics.ROS.Pkg.Finder import Robotics.ROS.Pkg.Types -- | Take message files of given package pkgMessages :: Package -> IO [FilePath] pkgMessages pkg = do msgDirExist <- doesDirectoryExist msgDir if msgDirExist then do msgFiles <- getDirectoryContents msgDir return $ filter ((== ".msg") . takeExtension) msgFiles else return [] where msgDir = joinPath [path pkg, "msg"] -- | Search message files for all packages. -- -- Like to -- -- @ -- packageList >>= mapM pkgMessages -- @ -- messageList :: IO [(Package, [FilePath])] messageList = do pkgs <- packageList msgs <- mapM pkgMessages pkgs return (zip pkgs msgs)