aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/gleam/binary.gleam9
-rw-r--r--src/gleam/binary_native.erl5
-rw-r--r--test/gleam/binary_test.gleam11
4 files changed, 25 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 165d37e..a2ec949 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,6 @@
# Changelog
-- `binary` module created with `from_string`, `byte_size`, `part`,
+- `binary` module created with `from_string`, `byte_size`, `append`, `part`,
`int_to_u32` and `int_from_u32`.
## 0.9.0 - 2020-05-26
diff --git a/src/gleam/binary.gleam b/src/gleam/binary.gleam
index 7c7e308..7ce8c3e 100644
--- a/src/gleam/binary.gleam
+++ b/src/gleam/binary.gleam
@@ -11,6 +11,15 @@ pub external fn from_string(String) -> Binary =
pub external fn byte_size(Binary) -> Int =
"erlang" "byte_size"
+/// Create a new binary by joining two binaries.
+///
+/// ## Examples
+///
+/// > append(to: "butter", suffix: "fly")
+/// "butterfly"
+///
+pub external fn append(first: Binary, second: Binary) -> Binary = "binary_native" "append"
+
/// Extracts part of a binary.
///
/// Binary part will start at given position and continue up to specified length.
diff --git a/src/gleam/binary_native.erl b/src/gleam/binary_native.erl
index 1969602..c7dfad7 100644
--- a/src/gleam/binary_native.erl
+++ b/src/gleam/binary_native.erl
@@ -1,5 +1,8 @@
-module (binary_native).
--export ([int_to_u32/1, int_from_u32/1, part/3]).
+-export ([int_to_u32/1, int_from_u32/1, append/2, part/3]).
+
+append(First, Second) ->
+ <<First/binary, Second/binary>>.
part(Bin, Pos, Len) ->
try {ok, binary:part(Bin, Pos, Len)} catch
diff --git a/test/gleam/binary_test.gleam b/test/gleam/binary_test.gleam
index 20b7cc2..bb90635 100644
--- a/test/gleam/binary_test.gleam
+++ b/test/gleam/binary_test.gleam
@@ -9,6 +9,17 @@ pub fn length_test() {
|> should.equal(0)
}
+pub fn append_test() {
+ binary.from_string("Test")
+ |> binary.append(binary.from_string(" Me"))
+ |> should.equal(binary.from_string("Test Me"))
+
+ let Ok(zero_32bit) = binary.int_to_u32(0)
+ zero_32bit
+ |> binary.append(binary.from_string(""))
+ |> should.equal(zero_32bit)
+}
+
pub fn part_test() {
binary.from_string("hello")
|> binary.part(0, 5)