Comments (7)
Fleece should handle recursive types without any problem when using implicit codecs (overloads) which is the case here.
This failure seems to be due to a bug that was introduced recently.
I'll have a look and see how can it be solved.
from falanx.
As single self referencing type fails:
[<CLIMutable>]
type NestedTestAllTypes =
{ mutable child : NestedTestAllTypes option }
static member JsonObjCodec =
fun child -> { child = child}
|> Fleece.Newtonsoft.withFields
|> Fleece.Newtonsoft.jfieldOpt ("child") (fun x -> x.child)
from falanx.
falanx_test.fs(800, 12): [FS0001] Type mismatch. Expecting a:
(IReadOnlyDictionary<string,JsonValue> -> Result<(TestAllTypes option -> NestedTestAllTypes),DecodeError>) * (NestedTestAllTypes -> IReadOnlyDictionary<string,JsonValue>) -> ConcreteCodec<KeyValuePair<string,JToken> list,KeyValuePair<string,JToken> list,NestedTestAllTypes,NestedTestAllTypes>
but given a:
SplitCodec<IReadOnlyDictionary<string,JsonValue>,(TestAllTypes option -> NestedTestAllTypes),NestedTestAllTypes> -> (IReadOnlyDictionary<string,JsonValue> -> Result<NestedTestAllTypes,DecodeError>) * (NestedTestAllTypes -> IReadOnlyDictionary<string,JsonValue>)
The type:
ConcreteCodec<KeyValuePair<string,JToken> list,KeyValuePair<string,JToken> list,NestedTestAllTypes,NestedTestAllTypes>
does not match the type:
(IReadOnlyDictionary<string,JsonValue> -> Result<NestedTestAllTypes,DecodeError>) * (NestedTestAllTypes -> IReadOnlyDictionary<string,JsonValue>)
from falanx.
@gusty The solution was to use the ConcreteCodec
parts and depreciate the use of `jfieldOpt etc?
from falanx.
Yes.
To add more context: the problem is that ConcreteCodec
was introduced as the way to define codecs, while the jfield
family of functions were kept as backward compatible, but this caused a problem with recursive definitions as both overloads exists and the priority is given to the ConcreteCodec
.
So, an easy fix is:
- in Fleece rename the
JsonObjCodec
method - in Falanx also change that to that new name
A better but more complicated fix is what you say: use in Falanx ConcreteCodec
which will be the supported way moving forward.
from falanx.
Would ConcreteCodec
alleviate the issue with tuple encoding?
from falanx.
Yes, ConcreteCodec
does not suffer the infinite recursion, as it's the default overload.
from falanx.
Related Issues (20)
- Usage of external project resources HOT 4
- Single nested enum fails due to no support in fleece HOT 11
- A proto file with a normal field follows by a oneOf results in incorrect generated code
- Missing oneOf property assignment in a message with more than one oneOf
- Mutual recursion is not supported HOT 1
- Enum with duplicate value produced code with duplicates
- Field ordering test produces out of ordered assignments in json HOT 1
- Running falanx on a proto file with a map in it fails with error HOT 2
- A proto message with primitive field then a map throws a not implemented exception HOT 1
- In a proto message a map followed by a primitive causes an exception HOT 1
- Poor error message HOT 2
- Enum in class is not working: lead.proto.fs(251, 13): [FS0001] No overloads match for method 'OfJson'. HOT 1
- update froto HOT 2
- Is there a way to import well known types?
- Generation fails when an Enum is inside of a oneof block HOT 1
- Move to FsProjects HOT 4
- It failed to build when there's a "bytes" field in the "oneof" HOT 1
- Parse fail for Mapbox vector_tile.proto HOT 1
- Quick question: does this use https://github.com/grpc/grpc-dotnet under the hood? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from falanx.