From 267c3b8d2ff3340c022330dfb367128cddb69b51 Mon Sep 17 00:00:00 2001 From: Mathias Jean Johansen Date: Mon, 2 May 2022 18:02:34 +0200 Subject: Refactor `last` to return a `Result`. --- src/gleam/string.gleam | 18 +++++++++--------- test/gleam/string_test.gleam | 8 ++++---- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/gleam/string.gleam b/src/gleam/string.gleam index 89cdc6c..bc13758 100644 --- a/src/gleam/string.gleam +++ b/src/gleam/string.gleam @@ -763,26 +763,26 @@ pub fn first(s: String) -> Result(String, Nil) { } } -/// Returns the last element in a grapheme and wraps it in an `Option(String)`. -/// If the `String` is empty, it returns `None`. Otherwise, it returns -/// `Some(String)`. +/// Returns the last grapheme cluster in a given `String` and wraps it in a +/// `Result(String, Nil)`. If the `String` is empty, it returns `Error(Nil)`. +/// Otherwise, it returns `Ok(String)`. /// /// ## Examples /// /// ```gleam /// > last("") -/// None +/// Error(Nil) /// ``` /// /// ```gleam /// > last("icecream") -/// Some("m") +/// Ok("m") /// ``` /// -pub fn last(s: String) -> Option(String) { - case length(s) { - 0 -> None - _ -> Some(slice(s, -1, 1)) +pub fn last(s: String) -> Result(String, Nil) { + case pop_grapheme(s) { + Ok(#(_, rest)) -> Ok(slice(rest, -1, 1)) + Error(e) -> Error(e) } } diff --git a/test/gleam/string_test.gleam b/test/gleam/string_test.gleam index 56b50a0..d6e1c23 100644 --- a/test/gleam/string_test.gleam +++ b/test/gleam/string_test.gleam @@ -382,19 +382,19 @@ pub fn first_test() { pub fn last_test() { "" |> string.last - |> should.equal(None) + |> should.be_error "gleam" |> string.last - |> should.equal(Some("m")) + |> should.equal(Ok("m")) "gleam " |> string.last - |> should.equal(Some(" ")) + |> should.equal(Ok(" ")) "եոգլի" |> string.last - |> should.equal(Some("ի")) + |> should.equal(Ok("ի")) } pub fn capitalize_test() { -- cgit v1.2.3