GString refactor#600
Conversation
cb4667d to
5cbef4c
Compare
It's merged :) |
6da3b98 to
fe45283
Compare
|
More PRs to address breakage caused by this PR:
Probably they should be merged all at once, or before this one |
|
Next step: change all functions that take |
|
|
||
| impl Deref for GString { | ||
| type Target = str; | ||
| type Target = GStr; |
There was a problem hiding this comment.
I guess we should think about the advantages / disadvantages of this. What does a &GStr bring in comparison to just having a &str?
There was a problem hiding this comment.
Do we have functions taking GStr only?
There was a problem hiding this comment.
Maybe better to use str for the time being until we make the switch then.
There was a problem hiding this comment.
I'll take this out, but gtk-rs/gtk3-rs#739 and gtk-rs/gir#1327 can still be merged without this if you want. They don't break anything.
There was a problem hiding this comment.
Sounds like a good idea regardless, yes. More future-proof.
9e2ca9c to
b2d545a
Compare
|
Now added |
That was my thought too. We can test it out later with some of the manually implemented functions, and then afterwards work it into gir. |
|
While you are updating GString traits, maybe we should have Default impls here. See the gstreamer-rs PR for context |
sdroege
left a comment
There was a problem hiding this comment.
Seems OK to me apart from that final comment
It's here already |
|
Looks generally nice to me. Are you aware of any drawbacks here or does it all seem nice to you? Also this should probably get a change to
|
a938c6b to
51f87df
Compare
bf3d2f1 to
f984f68
Compare
|
Some drawbacks that still persist:
|
f984f68 to
a165b19
Compare
|
I think those issues are all design issues or can be fixed later, so this is ready now IMO |
a165b19 to
8e5ad99
Compare
8e5ad99 to
f593acb
Compare
For consistency with str::as_bytes. Since we always store the length of the slice we can always do a const conversion like str does.
Optimizes GString to avoid unnecessary checking for interior nul bytes. Interior nul bytes will now only be checked upon request. When converting to C strings, the string will always get truncated to the first nul byte. Since GString can now contain interior nul bytes in some circumstances, its interior representation is now Option<Box<str>>. Also adds custom error types for conversions.
For const std::slice::from_raw_parts, stabilized in rust-lang/rust#97522
Also use Cow<[u8]> as storage to optimize out empty string allocations.
add some PartialEq and PartialOrd implementations for GStr too
These traits can accept both &str or &GStr as an argument. A copy is made when passing &str, but avoided when passing &GStr.
f593acb to
8fc9217
Compare
Update: See comment #600 (comment) for the general status of this PR.
Original comment: All of these
TryFromare panicking when they don't really need to. This is probably going to break some other things, I'd like to check this against gtk-rs and gstreamer-rs at least. Another option is to leave the panickingFromtraits in and also supportTryFrom.Also makes
GStringderef as aGStr