Add default argument for str.first and str.last (#6554)

Co-authored-by: Laurenz <laurmaedje@gmail.com>
This commit is contained in:
Malo 2025-07-09 13:10:24 +01:00 committed by GitHub
parent 9e6adb6f45
commit 1dc4c248d1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 4 deletions

View File

@ -179,24 +179,40 @@ impl Str {
}
/// Extracts the first grapheme cluster of the string.
/// Fails with an error if the string is empty.
///
/// Returns the provided default value if the string is empty or fails with
/// an error if no default value was specified.
#[func]
pub fn first(&self) -> StrResult<Str> {
pub fn first(
&self,
/// A default value to return if the string is empty.
#[named]
default: Option<Str>,
) -> StrResult<Str> {
self.0
.graphemes(true)
.next()
.map(Into::into)
.or(default)
.ok_or_else(string_is_empty)
}
/// Extracts the last grapheme cluster of the string.
/// Fails with an error if the string is empty.
///
/// Returns the provided default value if the string is empty or fails with
/// an error if no default value was specified.
#[func]
pub fn last(&self) -> StrResult<Str> {
pub fn last(
&self,
/// A default value to return if the string is empty.
#[named]
default: Option<Str>,
) -> StrResult<Str> {
self.0
.graphemes(true)
.next_back()
.map(Into::into)
.or(default)
.ok_or_else(string_is_empty)
}

View File

@ -103,6 +103,10 @@
#test("Hello".last(), "o")
#test("🏳🌈A🏳".first(), "🏳️‍🌈")
#test("🏳🌈A🏳".last(), "🏳️‍⚧️")
#test("hey".first(default: "d"), "h")
#test("".first(default: "d"), "d")
#test("hey".last(default: "d"), "y")
#test("".last(default: "d"), "d")
--- string-first-empty ---
// Error: 2-12 string is empty