Advertisement
Guest User

Untitled

a guest
Jun 2nd, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.85 KB | None | 0 0
  1. open System.Net.Http
  2. open System
  3. type RequestBuilder()=
  4.      
  5.       member this.Combine (a:HttpRequestMessage->HttpRequestMessage,b:HttpRequestMessage->HttpRequestMessage) = a>>b
  6.       member this.Yield (())=fun r->r
  7.       member this.Yield (r:HttpRequestMessage->HttpRequestMessage)=r
  8.  
  9.       member this.Delay(f)=f()
  10.  
  11.       [<CustomOperation("method")>]
  12.       member this.Method(f:HttpRequestMessage->HttpRequestMessage,m:HttpMethod)=
  13.         fun r->
  14.          let request=f(r)
  15.          request.Method<-m
  16.          request
  17.       [<CustomOperation("header")>]
  18.       member this.Header(f:HttpRequestMessage->HttpRequestMessage,name:string,value:string)=
  19.        fun r->
  20.         let request=f(r)
  21.         request.Headers.Add(name,value)
  22.         request
  23.       [<CustomOperation("url")>]
  24.       member this.Url (f:HttpRequestMessage->HttpRequestMessage,uri)=
  25.        fun r->
  26.         let request=f(r)
  27.         request.RequestUri<-new Uri(uri)
  28.         request    
  29.        
  30. [<EntryPoint>]
  31. let main argv =
  32.     let req  =RequestBuilder()
  33.  
  34.     let request=req
  35.                    {
  36.                       method HttpMethod.Get
  37.                       url "http://lenta.ru"
  38.                       header "Authorization" "Basic"
  39.                       header "MyHeader" "MyValue"
  40.                    }
  41.  
  42.     let req2=req
  43.                    {
  44.                       method HttpMethod.Delete
  45.                       url "http://j.ru"
  46.                    
  47.                    }
  48.     let getBuilder=req {method HttpMethod.Get}
  49.     let headers= req{
  50.                      header "Authorization" "Basic"
  51.                      header "MyHeader" "MyValue"
  52.                    }
  53.  
  54.  
  55.     let r1=req{
  56.                  yield getBuilder
  57.                  yield headers
  58.               }
  59.     printfn "%A" argv
  60.     let r2=new HttpRequestMessage()|>r1
  61.     0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement