Add default argument for str.first and str.last

This commit is contained in:
Malo 2025-07-03 22:47:11 +01:00
parent 22a57fcf5c
commit d8ee74f5d3

View File

@ -178,25 +178,39 @@ impl Str {
self.0.len() self.0.len()
} }
/// Extracts the first grapheme cluster of the string. /// Extracts the first grapheme cluster of the string. Fails with an error
/// Fails with an error if the string is empty. /// if the string is empty. Returns the default value if the string is empty
/// or fails with an error is no default value was specified.
#[func] #[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 self.0
.graphemes(true) .graphemes(true)
.next() .next()
.map(Into::into) .map(Into::into)
.or(default)
.ok_or_else(string_is_empty) .ok_or_else(string_is_empty)
} }
/// Extracts the last grapheme cluster of the string. /// Extracts the last grapheme cluster of the string. Fails with an error if
/// Fails with an error if the string is empty. /// the string is empty. Returns the default value if the string is empty or
/// fails with an error is no default value was specified.
#[func] #[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 self.0
.graphemes(true) .graphemes(true)
.next_back() .next_back()
.map(Into::into) .map(Into::into)
.or(default)
.ok_or_else(string_is_empty) .ok_or_else(string_is_empty)
} }