module System.USB.IDDB.Base
( IDDB(..)
, VendorID, VendorName
, ProductID, ProductName
, emptyDb
, vendorName
, vendorId
, productName
, productId
, getDataFileName
)
where
import Data.ByteString (ByteString)
import qualified Data.Bimap as BM
import qualified Data.Map as MP
#ifdef BUILD_WITH_CABAL
import Paths_usb_id_database (getDataFileName)
#else
getDataFileName :: FilePath -> IO FilePath
getDataFileName = return
#endif
type VendorID = Int
type ProductID = Int
type VendorName = ByteString
type ProductName = ByteString
data IDDB = IDDB { dbVendors :: BM.Bimap VendorID VendorName
, dbProducts :: MP.Map VendorID (BM.Bimap ProductID ProductName)
}
emptyDb :: IDDB
emptyDb = IDDB { dbVendors = BM.empty
, dbProducts = MP.empty
}
vendorName :: IDDB -> VendorID -> Maybe VendorName
vendorName db vid = BM.lookup vid (dbVendors db)
vendorId :: IDDB -> VendorName -> Maybe VendorID
vendorId db name = BM.lookupR name (dbVendors db)
productName :: IDDB -> VendorID -> ProductID -> Maybe ProductName
productName db vid pid = BM.lookup pid =<< MP.lookup vid (dbProducts db)
productId :: IDDB -> VendorID -> ProductName -> Maybe ProductID
productId db vid name = BM.lookupR name =<< MP.lookup vid (dbProducts db)