-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
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
added to_json
function
#4229
added to_json
function
#4229
Conversation
The last test I am a bit unsure about since trying to parse the returned into JSON into serde_json::Value results in an error |
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.
Thanks for working on this 🙏
I added two comments about potential improvements, if you need help with the nullabilty handling just let me know.
/// let result = diesel::select(to_json::<Integer, _>(1)) | ||
/// .get_result::<Value>(connection)?; | ||
/// | ||
/// let expected: Value = serde_json::from_str("1").unwrap(); |
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.
can we use the serde_json::json!
macro instead to construct the expected values?
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.
done
/// # Ok(()) | ||
/// # } | ||
/// ``` | ||
fn to_json<E: SingleValue>(e: E) -> Json; |
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.
This function seems to return null
if you pass in a null values. We want to have a doc test demonstrating that this is correctly propagated.
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.
ive changed the last test a bit, let me know if its okay
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.
No, that's not what I had in mind. My idea was to make the return type Nullable<Json>
if the argument is nullable and Json
for non-null arguments. As I did not know without a quick experiment how to do that I've pushed 8089dff to change it. (I needed to try it myself anyway).
To explain what's going on there:
- The
SqlType
trait as aIsNull
associated type that indicates whether the current type is nullable or not. We can access it as it's a super trait ofSingleValue
- The
IsNull
type implementsMaybeNullableType<T>
which wrapsT
intoNullable
if the input type was nullable, otherwise it will just result inT
.
By using that as return type we enforce that we return a non-nullable value for non-nullable inputs and nullable types otherwise, which allows us to correctly write the last test case.
added the
to_json
function under #4216