Skip to content

Commit

Permalink
Added two more HttpContext extension methods and default computation …
Browse files Browse the repository at this point in the history
…expressions
  • Loading branch information
dustinmoris committed May 17, 2017
1 parent 31df618 commit 05b0230
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 11 deletions.
28 changes: 18 additions & 10 deletions src/Giraffe/Common.fs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
}
serializer.Deserialize reader :?> 'T
15 changes: 15 additions & 0 deletions src/Giraffe/ComputationExpressions.fs
Original file line number Diff line number Diff line change
@@ -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()
3 changes: 2 additions & 1 deletion src/Giraffe/Giraffe.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<AssemblyName>Giraffe</AssemblyName>
<VersionPrefix>0.1.0-alpha017</VersionPrefix>
<VersionPrefix>0.1.0-alpha018</VersionPrefix>
<Description>A native functional ASP.NET Core web framework for F# developers.</Description>
<Copyright>Copyright 2017 Dustin Moris Gorski</Copyright>
<NeutralLanguage>en-GB</NeutralLanguage>
Expand Down Expand Up @@ -40,6 +40,7 @@

<ItemGroup>
<Compile Include="Common.fs" />
<Compile Include="ComputationExpressions.fs" />
<Compile Include="FormatExpressions.fs" />
<Compile Include="HttpContextExtensions.fs" />
<Compile Include="HtmlEngine.fs" />
Expand Down
16 changes: 16 additions & 0 deletions src/Giraffe/HttpContextExtensions.fs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,22 @@ type HttpContext with
member this.GetLogger<'T>() =
this.GetService<ILogger<'T>>()

/// ---------------------------
/// 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
/// ---------------------------
Expand Down

0 comments on commit 05b0230

Please sign in to comment.