From c617f6aaaafaf43254bc6d7f1958dd4bb41b55f3 Mon Sep 17 00:00:00 2001 From: Ruben Bartelink <ruben@bartelink.com> Date: Thu, 2 Jan 2025 01:13:43 +0000 Subject: [PATCH] Target alpha9 --- CHANGELOG.md | 2 ++ samples/Infrastructure/Services.fs | 2 +- samples/Store/Domain/Domain.fsproj | 2 +- samples/Store/Domain/Infrastructure.fs | 2 +- samples/Tutorial/Infrastructure.fs | 2 +- samples/Tutorial/Tutorial.fsproj | 2 +- tests/Equinox.CosmosStore.Integration/AccessStrategies.fs | 2 +- .../CosmosCoreIntegration.fs | 4 ++-- .../FsCodecCompressionTests.fs | 6 +++--- 9 files changed, 13 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35c060b76..b0cbe982f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ The `Unreleased` section name is replaced by the expected version of next releas ### Added +- `Equinox.CosmosStore`: Roundtrip `D` and `M` encoding values as per `DynamoStore`, enabling more extensive control of compression [#472](https://github.com/jet/equinox/pull/472) - `Equinox.CosmosStore`: Use `Microsoft.Azure.Cosmos` integrated `System.Text.Json` support; added ability to specify `serializerOptions` [#467](https://github.com/jet/equinox/pull/467) - `Equinox.CosmosStore`: Group metrics by Container Name [#449](https://github.com/jet/equinox/pull/449) - `Equinox.CosmosStore`: Group metrics by Category; split out `Tip` activity [#453](https://github.com/jet/equinox/pull/453) @@ -29,6 +30,7 @@ The `Unreleased` section name is replaced by the expected version of next releas ### Removed - `eqx stats`: `-A` (all stats) is now the default unless you specify >=1 of the individual stats via `ESDNO` flags [#459](https://github.com/jet/equinox/pull/459) +- `Equinox.CosmosStore.CosmosStoreCategory`: Removed `shouldCompress` mechanism as compression is now external [#472](https://github.com/jet/equinox/pull/472) <a name="4.0.4"></a> ## [4.0.4] - 2024-05-08 diff --git a/samples/Infrastructure/Services.fs b/samples/Infrastructure/Services.fs index 69ec58174..901af7463 100644 --- a/samples/Infrastructure/Services.fs +++ b/samples/Infrastructure/Services.fs @@ -17,7 +17,7 @@ type Store(store) = MemoryStore.MemoryStoreCategory(store, name, codec, fold, initial) | Store.Config.Cosmos (store, caching, unfolds) -> let accessStrategy = if unfolds then CosmosStore.AccessStrategy.Snapshot snapshot else CosmosStore.AccessStrategy.Unoptimized - CosmosStore.CosmosStoreCategory<'event,'state,_>(store, name, FsCodec.SystemTextJson.EncodedBody.EncodeTryCompress codec, fold, initial, accessStrategy, caching) + CosmosStore.CosmosStoreCategory<'event,'state,_>(store, name, FsCodec.SystemTextJson.Encoding.EncodeTryCompress codec, fold, initial, accessStrategy, caching) | Store.Config.Dynamo (store, caching, unfolds) -> let accessStrategy = if unfolds then DynamoStore.AccessStrategy.Snapshot snapshot else DynamoStore.AccessStrategy.Unoptimized DynamoStore.DynamoStoreCategory<'event,'state,_>(store, name, FsCodec.Compression.EncodeTryCompress codec, fold, initial, accessStrategy, caching) diff --git a/samples/Store/Domain/Domain.fsproj b/samples/Store/Domain/Domain.fsproj index 979837f82..873a9f768 100644 --- a/samples/Store/Domain/Domain.fsproj +++ b/samples/Store/Domain/Domain.fsproj @@ -19,7 +19,7 @@ <PackageReference Include="FSharp.Core" Version="6.0.7" ExcludeAssets="contentfiles" /> <PackageReference Include="FsCodec.NewtonsoftJson" Version="3.0.0" /> - <PackageReference Include="FsCodec.SystemTextJson" Version="3.0.4-alpha.0.5" /> + <PackageReference Include="FsCodec.SystemTextJson" Version="3.0.4-alpha.0.9" /> <ProjectReference Include="..\..\..\src\Equinox\Equinox.fsproj" /> </ItemGroup> diff --git a/samples/Store/Domain/Infrastructure.fs b/samples/Store/Domain/Infrastructure.fs index cb490a7ef..02eb0296e 100644 --- a/samples/Store/Domain/Infrastructure.fs +++ b/samples/Store/Domain/Infrastructure.fs @@ -92,7 +92,7 @@ module EventCodec = /// For CosmosStore - we encode to JsonElement as that's what the store talks let genJsonElement<'t when 't :> TypeShape.UnionContract.IUnionContract> = - FsCodec.SystemTextJson.CodecJsonElement.Create<'t>() |> FsCodec.SystemTextJson.EncodedBody.EncodeUncompressed + FsCodec.SystemTextJson.CodecJsonElement.Create<'t>() |> FsCodec.SystemTextJson.Encoding.EncodeUncompressed /// For stores other than CosmosStore, we encode to UTF-8 and have the store do the right thing let gen<'t when 't :> TypeShape.UnionContract.IUnionContract> = diff --git a/samples/Tutorial/Infrastructure.fs b/samples/Tutorial/Infrastructure.fs index 816003ac9..ee99c8a9d 100644 --- a/samples/Tutorial/Infrastructure.fs +++ b/samples/Tutorial/Infrastructure.fs @@ -23,7 +23,7 @@ module EventCodec = /// For CosmosStore - we encode to JsonElement as that's what the store talks let genJsonElement<'t when 't :> TypeShape.UnionContract.IUnionContract> = - FsCodec.SystemTextJson.CodecJsonElement.Create<'t>() |> FsCodec.SystemTextJson.EncodedBody.EncodeUncompressed + FsCodec.SystemTextJson.CodecJsonElement.Create<'t>() |> FsCodec.SystemTextJson.Encoding.EncodeUncompressed /// For stores other than CosmosStore, we encode to UTF-8 and have the store do the right thing let gen<'t when 't :> TypeShape.UnionContract.IUnionContract> = diff --git a/samples/Tutorial/Tutorial.fsproj b/samples/Tutorial/Tutorial.fsproj index c7e797d9f..fc8d93fe5 100644 --- a/samples/Tutorial/Tutorial.fsproj +++ b/samples/Tutorial/Tutorial.fsproj @@ -28,7 +28,7 @@ <ItemGroup> <PackageReference Include="MinVer" Version="5.0.0" PrivateAssets="All" /> - <PackageReference Include="FsCodec.SystemTextJson" Version="3.0.4-alpha.0.5" /> + <PackageReference Include="FsCodec.SystemTextJson" Version="3.0.4-alpha.0.9" /> <PackageReference Include="Serilog.Sinks.Console" Version="5.0.1" /> <PackageReference Include="Serilog.Sinks.Seq" Version="7.0.0" /> </ItemGroup> diff --git a/tests/Equinox.CosmosStore.Integration/AccessStrategies.fs b/tests/Equinox.CosmosStore.Integration/AccessStrategies.fs index 8a5e9c0ab..1fcfea895 100644 --- a/tests/Equinox.CosmosStore.Integration/AccessStrategies.fs +++ b/tests/Equinox.CosmosStore.Integration/AccessStrategies.fs @@ -44,7 +44,7 @@ module SequenceCheck = #if STORE_DYNAMO let codec = FsCodec.SystemTextJson.Codec.Create<Event>() |> FsCodec.Compression.EncodeTryCompress #else - let codec = FsCodec.SystemTextJson.CodecJsonElement.Create<Event>() |> FsCodec.SystemTextJson.EncodedBody.EncodeTryCompress + let codec = FsCodec.SystemTextJson.CodecJsonElement.Create<Event>() |> FsCodec.SystemTextJson.Encoding.EncodeTryCompress #endif module Fold = diff --git a/tests/Equinox.CosmosStore.Integration/CosmosCoreIntegration.fs b/tests/Equinox.CosmosStore.Integration/CosmosCoreIntegration.fs index 8b5e52525..e7c6eb8e3 100644 --- a/tests/Equinox.CosmosStore.Integration/CosmosCoreIntegration.fs +++ b/tests/Equinox.CosmosStore.Integration/CosmosCoreIntegration.fs @@ -10,7 +10,7 @@ open System type TestEvents() = static member private Create(i, ?eventType, ?json) = - let enc = System.Text.Json.JsonSerializer.SerializeToElement >> FsCodec.SystemTextJson.EncodedBody.Uncompressed + let enc = System.Text.Json.JsonSerializer.SerializeToElement >> FsCodec.SystemTextJson.Encoding.Uncompressed FsCodec.Core.EventData.Create ( sprintf "%s:%d" (defaultArg eventType "test_event") i, enc (defaultArg json "{\"d\":\"d\"}"), @@ -65,7 +65,7 @@ type Tests(testOutputHelper) = test <@ match res with Choice2Of2 (:? InvalidOperationException as ex) -> ex.Message.StartsWith "Must write either events or unfolds." | x -> failwith $"%A{x}" @> } - let stringOfEncodedBody (x: Equinox.CosmosStore.Core.EncodedBody) = FsCodec.SystemTextJson.EncodedBody.ToJsonElement(x).GetRawText() + let stringOfEncodedBody (x: Equinox.CosmosStore.Core.EncodedBody) = FsCodec.SystemTextJson.Encoding.ToJsonElement(x).GetRawText() let jsonDiff (x: string) (y: string) = match JsonDiffPatchDotNet.JsonDiffPatch().Diff(JToken.Parse x, JToken.Parse y) with | null -> "" diff --git a/tests/Equinox.CosmosStore.Integration/FsCodecCompressionTests.fs b/tests/Equinox.CosmosStore.Integration/FsCodecCompressionTests.fs index a5b90109a..6c50476a0 100644 --- a/tests/Equinox.CosmosStore.Integration/FsCodecCompressionTests.fs +++ b/tests/Equinox.CosmosStore.Integration/FsCodecCompressionTests.fs @@ -38,14 +38,14 @@ type CoreBehaviors() = [<Fact>] let ``serializes, achieving expected compression`` () = - let encoded = eventCodec |> FsCodec.SystemTextJson.EncodedBody.EncodeTryCompress |> _.Encode((), A { embed = String('x',5000) }) + let encoded = eventCodec |> FsCodec.SystemTextJson.Encoding.EncodeTryCompress |> _.Encode((), A { embed = String('x',5000) }) let res = ser encoded test <@ res.Contains "\"d\":\"" && res.Length < 138 && res.Contains "\"D\":2" @> let codec compress = let forceCompression: FsCodec.SystemTextJson.CompressionOptions = { minSize = 0; minGain = -1000 } - if compress then FsCodec.SystemTextJson.EncodedBody.EncodeTryCompress(eventCodec, forceCompression) - else FsCodec.SystemTextJson.EncodedBody.EncodeUncompressed eventCodec + if compress then FsCodec.SystemTextJson.Encoding.EncodeTryCompress(eventCodec, options = forceCompression) + else FsCodec.SystemTextJson.Encoding.EncodeUncompressed eventCodec [<Property>] let roundtrips compress value =