-
-
Notifications
You must be signed in to change notification settings - Fork 6.9k
[Rust] reqwest shallow object query param #21199
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Rust] reqwest shallow object query param #21199
Conversation
match value { | ||
serde_json::Value::Object(_) => { | ||
unimplemented!( | ||
"Only flat objects are supported, use parse_deep_object() instead" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IMHO, having unimplemented here may cause unexpected panic from user point of view. How about auto fallback to parse_deep_object
:
serde_json::Value::Object(_) => {
return parse_deep_object("", value);
}
or just don't handle it, let it fallback to _ =>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The user should never see that. That's a developer targeted error.
As far as I can tell, the only way a user sees this, is if a developer makes a mistake modifying the templates in a way that uses the wrong parse fn.
And I'd say that if I let it pass through, then it will generate incorrect values (I don't think converting objects to strings will be very useful) and will make figuring out that someone broke the templates more difficult.
Or I'm missing something here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@whirm sorry for late reply
As far as I can tell, the only way a user sees this, is if a developer makes a mistake modifying the templates in a way that uses the wrong parse fn.
Yeah, that is my point of view.
I would love to see:
- CodeGen error/failure on detection of misconfiguring specs (e.g nested object in query params)
- IMHO, it's Code Generator responsibility/feature
- In the context of query params, guarantee that
isModel
always represents a flat object
- For (1), we must touch Code Generator (written in Java)
- For (2):
- If
isModel
always represents a flat object, then we don't need to specifyunimplemented!
serde_json::Value::Object(_) => { // empty, do nothing }
- If
isModel
does not represents a flat object for all the cases, then we need other flag/property or back to (1)
- If
Please tell me your opinions!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
serde_json::Value::Object(_) => { // empty, do nothing }
I would rather have an unreachable!()
there so that we ensure that any potential future mistake/behaviour change results in a very obvious panic instead of silently ignoring stuff.
@wing328 Do you know about this? v
If isModel does not represents a flat object for all the cases, then we need other flag/property or back to (1)
In any case, I don't have enough free time to dedicate to 1 so someone else would have to work on that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CodeGen error/failure on detection of misconfiguring specs (e.g nested object in query params)
my suggestion is to show a warning.
we try not to throw errors when a little part of the spec is not valid or makes no sense as the user may not want to use that particular endpoint/model anyway.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the meanwhile #21262 got merged, which seems to bring in a superset of what I was implementing here. :)
I'll close this PR for now and create a new one if it turns out our needs are not yet fully covered.
Cheers!
objectQueryParam.yaml
to cover both required and optional variants.PR checklist
Commit all changed files.
This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example
./bin/generate-samples.sh bin/configs/java*
.IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
master
(upcoming7.x.0
minor release - breaking changes with fallbacks),8.0.x
(breaking changes without fallbacks)@frol, @farcaller, @richardwhiuk, @paladinzh, @jacob-pro, @linxGnu Ready to review!