Comments (5)
@jamesthompson if I understand what you're asking about, generally we accomplish the recursion using the Message
constraint on MessageField
. A good example isData.ProtoLens.TextFormat
, which does a similar sort of recursion:
You can also see a similar sort of pattern in proto-lens-arbitrary
:
from proto-lens.
I implemented JSON serialization in this repository . Parsing would require some more work.
from proto-lens.
Is there any update on this?
from proto-lens.
I'm not sure this can be done with the current Message type class generically.
I've been working on converting JSON into a Message generically, and as you inspect a FieldDescriptor from a key in an inbound JSON object being parsed, you are able to access the underlying field type and lens for setting that value, but there's no way to do this recursively as you don't know anything about the underlying value being set by the lens, there's no constraint on value you're setting and no way for the compiler to know what this type represents and hence select a suitable instance to use in parsing that underlying field to set.
I really wish I could figure this out as I'd rather not have to hand roll parsing instances for all the types I'd like to deal with (which is in the 100s).
from proto-lens.
Thanks a lot @judah! This pointed me in the right direction - I'm happily parsing my JSON now. Thank you very much for all your work on this library too. I think it's a tour de force in haskell.
from proto-lens.
Related Issues (20)
- Too strict bounds on profunctors on hackage HOT 2
- Release for Stackage LTS-18.0 HOT 5
- Support GHC 9
- `readMessage` from `TextFormat` chokes on unicode in strings
- Re-add blackgnezdo HOT 2
- Increment upper bounds for some dependencies HOT 2
- New Hackage release HOT 3
- Support lazy construction for byte fields HOT 2
- Not compatible with mtl-2.3 and transformers-0.6 HOT 3
- google/protobuf/struct.proto not included in protobuf types HOT 2
- Show instance not working for first/default enum values
- Show instance not working for first/default enum values
- Support GHC 9.4 HOT 10
- Compilation hangs after some `default-extensions` added. HOT 1
- Replace deprecated `set-output` command with environment file
- Support deepseq-1.5 and bytestring-0.12
- Bump upper bounds for base, containers, ghc-prim, primitive
- Any way to generate protobuf schema from haskell types? HOT 2
- Please issue new Hackage release of proto-lens-protobuf-types HOT 2
- Support "Protobuf Editions"
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 proto-lens.