Browse Source

[F#/Oxpecker] Got rid of SpanJson as bringning no benefit. Disabled ReadyToRun (#9071)

Vladimir Shchur 1 year ago
parent
commit
3f72bd5545

+ 0 - 1
frameworks/FSharp/oxpecker/README.md

@@ -19,7 +19,6 @@ This includes tests for plaintext, json, and fortunes HTML serialization.
 
 * [Oxpecker](https://github.com/Lanayx/Oxpecker)
 * [Dapper](https://github.com/DapperLib/Dapper)
-* [SpanJson](https://github.com/Tornhoof/SpanJson)
 * ASP.NET Core
 
 ## Paths & Source for Tests

+ 3 - 0
frameworks/FSharp/oxpecker/oxpecker.dockerfile

@@ -4,6 +4,9 @@ COPY src/App .
 RUN dotnet publish -c Release -o out
 
 FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
+
+ENV DOTNET_ReadyToRun 0
+
 ENV URLS http://+:8080
 
 WORKDIR /app

+ 0 - 1
frameworks/FSharp/oxpecker/src/App/App.fsproj

@@ -14,6 +14,5 @@
     <PackageReference Include="Dapper" Version="2.1.44" />
     <PackageReference Include="Oxpecker" Version="0.10.1" />
     <PackageReference Include="Npgsql" Version="8.0.3" />
-    <PackageReference Include="SpanJson" Version="4.0.1" />
   </ItemGroup>
 </Project>

+ 7 - 30
frameworks/FSharp/oxpecker/src/App/Program.fs

@@ -2,7 +2,6 @@ namespace App
 
 open System
 open System.Collections.Generic
-open System.Threading.Tasks
 open Oxpecker
 
 [<AutoOpen>]
@@ -60,6 +59,7 @@ module HttpHandlers =
     open Npgsql
     open System.Text
     open Microsoft.AspNetCore.Http
+    open System.Text.Json
 
     let private extra =
         {
@@ -169,48 +169,26 @@ module HttpHandlers =
             ctx.SetContentType("text/plain")
             ctx.WriteBytes(result)
 
+    let jsonSimple value : EndpointHandler =
+        let options = JsonSerializerOptions(JsonSerializerDefaults.Web)
+        fun ctx ->
+            ctx.Response.WriteAsJsonAsync(value, options)
+
     let endpoints =
         [|
             route "/plaintext" <| utf8Const "Hello, World!"
-            route "/json"<| jsonChunked {| message = "Hello, World!" |}
+            route "/json"<| jsonSimple {| message = "Hello, World!" |}
             route "/fortunes" fortunes
             route "/db" singleQuery
             route "/queries/{count?}" multipleQueries
             route "/updates/{count?}" multipleUpdates
         |]
 
-
 module Main =
-    open SpanJson
-    open Microsoft.AspNetCore.Http
     open Microsoft.AspNetCore.Builder
-    open Microsoft.AspNetCore.Hosting
     open Microsoft.Extensions.DependencyInjection
     open Microsoft.Extensions.Hosting
     open Microsoft.Extensions.Logging
-    open System.Buffers
-
-    type SpanJsonSerializer() =
-        interface Serializers.IJsonSerializer with
-            member this.Serialize(value, ctx, chunked) =
-                ctx.Response.ContentType <- "application/json"
-                if chunked then
-                    if ctx.Request.Method <> HttpMethods.Head then
-                        JsonSerializer.Generic.Utf8.SerializeAsync<_>(value, stream = ctx.Response.Body).AsTask()
-                    else
-                        Task.CompletedTask
-                else
-                    task {
-                        let buffer = JsonSerializer.Generic.Utf8.SerializeToArrayPool<_>(value)
-                        ctx.Response.Headers.ContentLength <- buffer.Count
-                        if ctx.Request.Method <> HttpMethods.Head then
-                            do! ctx.Response.Body.WriteAsync(buffer)
-                            ArrayPool<byte>.Shared.Return(buffer.Array)
-                        else
-                            return ()
-                    }
-            member this.Deserialize _ =
-                failwith "Not implemented"
 
     [<EntryPoint>]
     let main args =
@@ -218,7 +196,6 @@ module Main =
         builder.Services
             .AddRouting()
             .AddOxpecker()
-            .AddSingleton<Serializers.IJsonSerializer>(SpanJsonSerializer())
         |> ignore
         builder.Logging.ClearProviders() |> ignore
         let app = builder.Build()