type MapFunc
[T
] = String
=> Option
[T
]
def httpMethod
: MapFunc
[HttpMethod
] = { case "POST" => Some
(POST
) }
def string
: MapFunc
[String
] = (v
: String
) => Some
(v
)
def bool
: MapFunc
[Boolean
] = { }
implicit class FuncTuple3
[F,T1,T2,T3
](tup
: (F
=> T1,F
=> T2,F
=> T3
)) { def mapList
(vs
: List
[F
]) = { case List
(v1,v2,v3
) => Some
(tup.
_1
(v1
),tup.
_2
(v2
),tup.
_3
(v3
)) }
}
}
case class Request
(method
: HttpMethod, keepAlive
: Boolean, url
: String
)
println {
(httpMethod, bool, string).mapList(List("GET", "1", "http://2...content-available-to-author-only...h.hk")) map {
case (method, Some
(keepAlive
), Some
(url
)) =>Request
(method getOrElse GET, keepAlive, url
) }
}
}
b2JqZWN0IE1haW4gZXh0ZW5kcyBBcHAgewoJCiAgdHlwZSBNYXBGdW5jW1RdID0gU3RyaW5nID0+IE9wdGlvbltUXQoKICB0cmFpdCBIdHRwTWV0aG9kCiAgY2FzZSBvYmplY3QgR0VUIGV4dGVuZHMgSHR0cE1ldGhvZAogIGNhc2Ugb2JqZWN0IFBPU1QgZXh0ZW5kcyBIdHRwTWV0aG9kCgogIGRlZiBodHRwTWV0aG9kOiBNYXBGdW5jW0h0dHBNZXRob2RdID0gewogICAgY2FzZSAiR0VUIiA9PiBTb21lKEdFVCkKICAgIGNhc2UgIlBPU1QiID0+IFNvbWUoUE9TVCkKICAgIGNhc2UgXyA9PiBOb25lCiAgfQoKICBkZWYgc3RyaW5nOiBNYXBGdW5jW1N0cmluZ10gPSAodjogU3RyaW5nKSA9PiBTb21lKHYpCgogIGRlZiBib29sOiBNYXBGdW5jW0Jvb2xlYW5dID0gewogICAgY2FzZSAiMSIgPT4gU29tZSh0cnVlKQogICAgY2FzZSAiMCIgPT4gU29tZShmYWxzZSkKICAgIGNhc2UgXyA9PiBOb25lCiAgfQoKICBpbXBsaWNpdCBjbGFzcyBGdW5jVHVwbGUzW0YsVDEsVDIsVDNdKHR1cDogKEYgPT4gVDEsRiA9PiBUMixGID0+IFQzKSkgewogICAgZGVmIG1hcExpc3QodnM6IExpc3RbRl0pID0gewogICAgICB2cyBtYXRjaCB7CiAgICAgICAgY2FzZSBMaXN0KHYxLHYyLHYzKSA9PiBTb21lKHR1cC5fMSh2MSksdHVwLl8yKHYyKSx0dXAuXzModjMpKQogICAgICAgIGNhc2UgXyA9PiBOb25lCiAgICAgIH0KICAgIH0KICB9CgogIGNhc2UgY2xhc3MgUmVxdWVzdChtZXRob2Q6IEh0dHBNZXRob2QsIGtlZXBBbGl2ZTogQm9vbGVhbiwgdXJsOiBTdHJpbmcpCgoKICBwcmludGxuIHsKICAgIChodHRwTWV0aG9kLCBib29sLCBzdHJpbmcpLm1hcExpc3QoTGlzdCgiR0VUIiwgIjEiLCAiaHR0cDovLzIuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmguaGsiKSkgbWFwIHsKICAgICAgY2FzZSAobWV0aG9kLCBTb21lKGtlZXBBbGl2ZSksIFNvbWUodXJsKSkgPT5SZXF1ZXN0KG1ldGhvZCBnZXRPckVsc2UgR0VULCBrZWVwQWxpdmUsIHVybCkKICAgICAgY2FzZSBfID0+IE5vbmUKICAgIH0KICB9CgoJCn0=