Migrations

Moving from 2.x to 3.x

Along with the infrastructure rewrite of the version 3.x, the public API also had some breaking changes, mainly the use of module function chaining intead of CE-based API. Migrating to the new API should be straight-forward, here follows a couple of snippets for how existing code from 2.x should look like in 3.x:

Suave: Before

let musicStore : IMusicStore = (* implementation *) 

// webApp : WebPart
let webApp = remoting musicStore {
    use_route_builder routeBuilder 
    use_error_handler errorHandler
    use_logger (printfn "%A")
}

Suave: After

let musicStore : IMusicStore = (* implementation *) 

let webApp = 
    Remoting.createApi()
    |> Remoting.fromValue musicStore
    |> Remoting.withRouteBuilder routeBuilder
    |> Remoting.withErrorHandler errorHandler 
    |> Remoting.withDiagnosticsLogger (printfn "%A")
    |> Remoting.buildWebPart

Giraffe Before

let musicStore : IMusicStore = (* implementation *) 

// webApp : WebPart
let webApp = remoting musicStore {
    use_route_builder routeBuilder 
    use_error_handler errorHandler
    use_logger (printfn "%A")
}

Giraffe After

let musicStore : IMusicStore = (* implementation *) 

let webApp = 
    Remoting.createApi()
    |> Remoting.fromValue musicStore
    |> Remoting.withRouteBuilder routeBuilder
    |> Remoting.withErrorHandler errorHandler 
    |> Remoting.withDiagnosticsLogger (printfn "%A")
    |> Remoting.buildHttpHandler

No more contexual handlers

Using generic record types type IMusicStore<'t> { } as means to access the request context is no longer possible, the http context will be provided from outside the the implementation, see Accessing Request Context.

results matching ""

    No results matching ""