Giter Club home page Giter Club logo

Comments (4)

eutampieri avatar eutampieri commented on July 28, 2024 1

from safer_ffi.

danielhenrymantilla avatar danielhenrymantilla commented on July 28, 2024

works on macOS

Hmm, that is weird: char_p::Box does indeed not implement AsRef<str> currently, for similary-ish reasons to stdlib's CStr not being AsRef<[u8]>: the operation is not constant (it needs to scan for the null-byte), and it is unclear whether the terminating null byte should be included in the output.

Note that I have no strong opinions on this, so I don't mind being convinced otherwise.

That being said, since char_p::Box does have an .into_string() method, which converts it into a String by reusing the allocation / in a zero-copy manner (it just .pop()s the terminating null byte), you could try to convert the char_p::Boxes into Strings beforehand if that is possible for you to do.

Otherwise you can also write your own wrapper type:

/// Same as `char_p::Box`, but with an `AsRef<str>` implementation which
/// includes
/// does not include
// (pick one)
/// the terminating null byte.
#[derive_ReprC] #[repr(transparent)] // <- if you want to use it instead of `char_p::Box` with `#[ffi_export]`
struct MyBoxedCString(char_p::Box);

impl AsRef<str> for MyBoxedCString {
    fn as_ref(self: &Self) -> &str {
        self.0.to_str()
        // pick one
        self.0.to_str_with_null()
    }
}

impl GenericCollectionShift<MyBoxedCString> for Shift {
}

from safer_ffi.

danielhenrymantilla avatar danielhenrymantilla commented on July 28, 2024

Hmm, there is an .into_string() operation, but no Into<String> impl. That one is very legitimate to add, so I may very well add it in the near future. Feel free to open an issue asking for it

from safer_ffi.

eutampieri avatar eutampieri commented on July 28, 2024

from safer_ffi.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    šŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. šŸ“ŠšŸ“ˆšŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ā¤ļø Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.