feat(neon): Add more TryIntoJs and TryFromJs implementations #1066
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
While trying
#[neon::export]
out in another project, I found some trivialTryFromJs
andTryIntoJs
implementations that simplified code.TryFromJs
forRoot<T>
. We can call.root(cx)
when extractingTryIntoJs
forBox<T>
andArc<T>
smart pointers. This is especially useful if you want to return anArc<Vec<T>>
and convert it into a typed array.TryIntoJs
for&Vec<T>
and&String
. We already had the slice versions, but it's nice to have these as well when combined with the smart pointers above.I wanted to implement for
T
whereT: AsRef<U>
andfor<'a> &'a U: TryIntoJs<'cx>
, but this isn't possible sinceU
wouldn't be bound by the implementation. It also conflicts with some specialized versions.There's a bunch more that we could add (e.g.,
Box<str>
), but I'm trying to be a little conservative and not implement for a bunch of strange types that users don't need. These are all convenience implementations anyway. Users haveWith
as an escape hatch.