Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- trait BrandsProvider{
- val brands: Seq[String]
- def addBrands(data: Seq[String]) = data ++ brands
- }
- trait PageProvider{
- val page: (Int, Int)
- def addPage(data: Seq[String]) = data :+ page.toString
- }
- trait Basic{
- def req(data: Seq[String]) = data.mkString(" ")
- }
- trait SimpleClient extends Basic{
- def sReq(data: Seq[String]) = req(data)
- }
- trait BrandsClient extends Basic{
- self: BrandsProvider =>
- def bReq(data: Seq[String]) = req(addBrands(data))
- }
- trait PageClient extends Basic{
- self: PageProvider =>
- def pReq(data: Seq[String]) = req(addPage(data))
- }
- trait PageBrandsClient extends Basic{
- self: BrandsProvider with PageProvider =>
- def pbReq(data: Seq[String]) = req(addPage(addBrands(data)))
- }
- object X1{
- def createClient(_brands: Seq[String], _page: (Int, Int)) = new {
- val brands = _brands
- val page = _page
- } with SimpleClient with PageBrandsClient with PageClient with BrandsProvider with PageProvider
- def createClient(_brands: Seq[String]) = new {
- val brands = _brands
- } with SimpleClient with BrandsClient with BrandsProvider
- def createClient( _page: (Int, Int)) = new {
- val page = _page
- } with SimpleClient with PageClient with PageProvider
- def createClient() = new SimpleClient { }
- }
- object X2{
- trait BOOL
- trait TRUE extends BOOL
- trait FALSE extends BOOL
- class Builder[HasBrands <: BOOL, HasPage <: BOOL] private[X2] (val _brands: Option[Seq[String]], val _page: Option[(Int, Int)]){
- def withBrands(brands: Seq[String]): Builder[TRUE, HasPage] = new Builder(Some(brands), _page)
- def withPage(page: (Int, Int)): Builder[HasBrands, TRUE] = new Builder(_brands, Some(page))
- }
- def createClient = new Builder(None, None)
- implicit def toSClient(builder: Builder[_, _]) = new SimpleClient { }
- implicit def toBClient(builder: Builder[TRUE, _]) = new {
- val brands = builder._brands.get
- } with BrandsClient with BrandsProvider
- implicit def toPClient(builder: Builder[_, TRUE]) = new {
- val page = builder._page.get
- } with PageClient with PageProvider
- implicit def toBPClient(builder: Builder[TRUE, TRUE]) = new {
- val brands = builder._brands.get
- val page = builder._page.get
- } with PageBrandsClient with BrandsProvider with PageProvider
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement