Skip to content

Make core::str::from_utf8* methods available on the str type #398

Closed
@robertbastian

Description

@robertbastian

Proposal

Problem statement

These are constructors for str, but they live in the core::str module. This means users always need a use core::str import in order to call them as str::from_utf8, or have to fully qualify them. This leads to two ways of doing things, and is also confusing for beginners who might think that core::str imports the type and is always needed when using str.

Motivating examples or use cases

pub use core::str;

fn foo1() -> &'static str {
    str::from_utf8(b"hi").unwrap()
}
pub use core::str; # not needed, even though we use `str`

fn foo2() -> &'static str {
    "hi"
}
fn foo3() -> &'static str {
    core::str::from_utf8(b"hi").unwrap()
}

Solution sketch

  • from_utf8
  • from_utf8_mut
  • from_utf8_unchecked
  • from_utf8_unchecked_mut

become associated functions on the str type. The core::str module reexports them, with a future deprecation warning, as was done for core::i16::MAX and friends.

Alternatives

Everything stays as it is

Links and related work

Open questions

  • There are two str_internals functions, next_code_point and utf8_char_width, not sure whether to include those.

Metadata

Metadata

Assignees

No one assigned

    Labels

    ACP-acceptedAPI Change Proposal is accepted (seconded with no objections)T-libs-apiapi-change-proposalA proposal to add or alter unstable APIs in the standard libraries

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions