Closed TomFryersMidsummer closed 7 months ago
The test failures were caused by some doctests calling
Proj::new_known_crs(&from, &to, None)
where from
is &str
, so &from
is &&str
. Perhaps there is more code out there that relies on this working.
I think the TryFrom
implementation extension doesn't cause breakage, since that never accepted &&str
.
I think the existing type signature is going to be more intuitive for the caller. If I'm understanding your motivation, having to type in a &
before your owned string does not seem like a big enough hurdle to justify this change.
Unless I'm misunderstanding, I don't think we should merge this.
Sorry, I missed your initial comment that this is about avoiding re-allocation inside of CString. But my conclusion is the same - it seems unlikely that gains here will be worth having a more opaque/confusing input type.
Are you experiencing this part of the code as a bottleneck?
I just find it a bit odd for Proj
to ask for a reference if in the end it wants to own its input. (See C-CALLER-CONTROL.)
Having had another look, I don't think this is performance-critical for us, so I don't mind if you don't think it's worth it.
The type could also be Into<String>
, which is clearer and more type-safe, but less flexible.
FWIW, in gdal
we take &str
because:
S: Into<Vec<u8>>
is not a type I'd want our users to see, especially given that most of them will be coming from other languages, like PythonI appreciate the attempt, but I think on balance this is not worthwhile, so closing.
CString::new
takes anyInto<Vec<u8>>
, which includesString
. This should make it possible to avoid reallocating when passing in an ownedString
with sufficient capacity.