Comments (5)
Sure, that could be a good thing, I'd be happy to provide any assistance needed
I initially thought using Erlang maps for map<_,_>
type fields was tied to using maps instead of records for messages -- that's why it is currently connected to that -- but I think I can see the use case for maps type fields as maps even though messages are records.
I've kept unit tests that use Erlang maps in gpb_compile_maps_tests.erl
so far. gpb
still works fine even with pre-17 Erlangs, for records, of course (but it can actually generate code that use maps on such systems). The data-driven encoder/decoder in gpb
is strictly records, no maps, no options, so no need to concern about that. In gpb_compile.erl
, I believe the best way to go would be to add some function, for instance get_format_for_map_type_fields(Opts) -> tuple_list | map
, and change some relevant calls currently to the get_records_or_maps_by_opts/1
into this new get_format_for_map_type_fields/1
.
Things to think of, that are easily forgotten:
- corresponding code for nifs
- generation of type spec strings
- The doc in the README.md
- Doc in the
gpb_compile:file/2
- Any corresponding command option for this(?) (doc in 2 places -- unfortunately -- handling only in one place though)
from gpb.
Hi, I don't know if you have already done any work here yet or not? If not, I have a proposal for you on the branch mapfields-as-maps
from gpb.
Cool, I haven't done any work on it yet. Turned out I likely don't need it at work because of the clients having to stay on 2.x features. But am still interested in getting this in to gpb.
from gpb.
Ok. I think I'll first rework the current maps
option, so that it expands to msgs_as_maps
, mapfields_as_maps
and defs_as_maps
, in the light of the earlier issue. This should be fully backwards compatible, yet still offer the desired functionality.
from gpb.
The option expanding is now in the just-pushed 3.25.2, so you can specify just mapfields_as_maps
to get what you're interested in. (closing)
from gpb.
Related Issues (20)
- There are many deficiencies HOT 6
- Hitting `no case clause matching: :group_end` in Elixir app using Exprotobuf/gpb HOT 8
- Add preprocessor check around no_underspec? HOT 3
- Optional added back to proto3 HOT 3
- Outdated example HOT 3
- Unset `google.protobuf.StringValue` map values are decoded as empty strings instead of empty values HOT 3
- proposal for performance improvements HOT 9
- Performance improvement for encoding protos with unchanged data HOT 7
- -spec for enum generated code is incorrect HOT 3
- For gpb 5: Drop support for Erlang versions before 19
- How can i call gpb from my rebar.config? HOT 2
- [enhancement] support for gpb text format HOT 1
- I think the generated file is too big HOT 7
- -mapfields-as-maps and -json possible incompability HOT 2
- Trying to ecode a float into a uint64 field results in a badarith exception instead of gpb_type_error HOT 2
- Enums are not defined as macros HOT 7
- Fix for warning on float 0.0 HOT 5
- to_json encodes `uint64` as an integer instead of a string HOT 1
- Add a @generated tag HOT 1
- Excessive File Size in Generated Protobuf Files HOT 3
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 gpb.