module Control.Access.RoleBased.Role where

------------------------------------------------------------------------------
import qualified Data.HashMap.Strict as M
import           Control.Access.RoleBased.Internal.Types
import           Data.Text (Text)


------------------------------------------------------------------------------
matches :: Role -> Role -> Bool
matches (Role a1 d1) (Role a2 d2) =
    a1 == a2 && dmatch (toSortedList d1) (toSortedList d2)
  where
    dmatch []         _      = True
    dmatch _          []     = False
    dmatch dds@(d:ds) (e:es) =
        case compare d e of
          LT -> False
          EQ -> dmatch ds es
          GT -> dmatch dds es


------------------------------------------------------------------------------
addRoleData :: Text -> RoleValue -> Role -> Role
addRoleData k v (Role n d) = Role n $ M.insert k v d