Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sealed trait GroupType
- case object BaseGroup extends GroupType
- case object UserGroup extends GroupType
- sealed trait GroupObjectType
- case object UsersGroupObject extends GroupObjectType
- case object ClientGroupObject extends GroupObjectType
- case object ImagesGroupObject extends GroupObjectType
- case object ImageCollectionsGroupObject extends GroupObjectType
- // enum GroupType {
- // case BaseGroup
- // case UserGroup
- // }
- // enum GroupObjectType {
- // case UsersGroupObject
- // case ClientGroupObject
- // case ImagesGroupObject
- // case ImageCollectionsGroupObject
- // }
- // import GroupType._
- // import GroupObjectType._
- trait ValidGroupObjectCombination[GT <: GroupType, GOT <: GroupObjectType]
- given BaseUser as ValidGroupObjectCombination[BaseGroup.type, UsersGroupObject.type]
- given BaseClient as ValidGroupObjectCombination[BaseGroup.type, ClientGroupObject.type]
- given UserImages as ValidGroupObjectCombination[UserGroup.type, ImagesGroupObject.type]
- def getSpecialGroups[GT <: GroupType, GOT <: GroupObjectType](
- clientId: String,
- groupType: GT,
- groupObjectType: GOT
- ) given ValidGroupObjectCombination[GT, GOT]: List[String] = List("whatever")
- // This compiles with the sealed trait version:
- println(getSpecialGroups("client1", BaseGroup, UsersGroupObject))
- // The explicitly given implicit is necessary for the enum version otherwise implicit not found error:
- // println(getSpecialGroups("client1", GroupType.BaseGroup(), GroupObjectType.UsersGroupObject()) given BaseUser)
- // This doesn't compile because there's no ValidGroupObjectCombination implicit exists for BaseGroup + ImageGroupObject
- // println(getSpecialGroups("client1", BaseGroup, ImagesGroupObject))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement