diff --git a/src/Giraffe/Common.fs b/src/Giraffe/Common.fs index 9660ce4e..6f99b078 100644 --- a/src/Giraffe/Common.fs +++ b/src/Giraffe/Common.fs @@ -5,11 +5,28 @@ open System.IO open System.Xml.Serialization open Newtonsoft.Json +/// --------------------------- +/// Helper functions +/// --------------------------- + let inline isNotNull x = isNull x |> not let inline strOption (str : string) = if String.IsNullOrEmpty str then None else Some str +let readFileAsString (filePath : string) = + async { + use stream = new FileStream(filePath, FileMode.Open) + use reader = new StreamReader(stream) + return! + reader.ReadToEndAsync() + |> Async.AwaitTask + } + +/// --------------------------- +/// Serializers +/// --------------------------- + let inline serializeJson x = JsonConvert.SerializeObject x let inline deserializeJson<'T> str = JsonConvert.DeserializeObject<'T> str @@ -23,13 +40,4 @@ let serializeXml x = let deserializeXml<'T> str = let serializer = XmlSerializer(typeof<'T>) use reader = new StringReader(str) - serializer.Deserialize reader :?> 'T - -let readFileAsString (filePath : string) = - async { - use stream = new FileStream(filePath, FileMode.Open) - use reader = new StreamReader(stream) - return! - reader.ReadToEndAsync() - |> Async.AwaitTask - } \ No newline at end of file + serializer.Deserialize reader :?> 'T \ No newline at end of file diff --git a/src/Giraffe/ComputationExpressions.fs b/src/Giraffe/ComputationExpressions.fs new file mode 100644 index 00000000..be4b4217 --- /dev/null +++ b/src/Giraffe/ComputationExpressions.fs @@ -0,0 +1,15 @@ +module Giraffe.ComputationExpressions + +open System + +type OptionBuilder() = + member x.Bind(v, f) = Option.bind f v + member x.Return v = Some v + +let opt = OptionBuilder() + +type ResultBuilder() = + member x.Bind(v, f) = Result.bind f v + member x.Return v = Ok v + +let res = ResultBuilder() \ No newline at end of file diff --git a/src/Giraffe/Giraffe.fsproj b/src/Giraffe/Giraffe.fsproj index 662b5e18..64ad964b 100644 --- a/src/Giraffe/Giraffe.fsproj +++ b/src/Giraffe/Giraffe.fsproj @@ -2,7 +2,7 @@ Giraffe - 0.1.0-alpha017 + 0.1.0-alpha018 A native functional ASP.NET Core web framework for F# developers. Copyright 2017 Dustin Moris Gorski en-GB @@ -40,6 +40,7 @@ + diff --git a/src/Giraffe/HttpContextExtensions.fs b/src/Giraffe/HttpContextExtensions.fs index a1ddb80c..67e8ac9e 100644 --- a/src/Giraffe/HttpContextExtensions.fs +++ b/src/Giraffe/HttpContextExtensions.fs @@ -22,6 +22,22 @@ type HttpContext with member this.GetLogger<'T>() = this.GetService>() + /// --------------------------- + /// Common helpers + /// --------------------------- + + member this.TryGetRequestHeader (key : string) = + let strValue = ref (StringValues()) + match this.Request.Headers.TryGetValue(key, strValue) with + | true -> Some (strValue.Value.ToString()) + | false -> None + + member this.GetRequestHeader (key : string) = + let strValue = ref (StringValues()) + match this.Request.Headers.TryGetValue(key, strValue) with + | true -> Ok (strValue.Value.ToString()) + | false -> Error (sprintf "HTTP request header '%s' is missing." key) + /// --------------------------- /// Model binding /// ---------------------------