# `Varint.SLEB128`
[🔗](https://github.com/ahamez/varint/blob/main/lib/varint/sleb128.ex#L1)

This module provides functions to convert signed integers to and from SLEB128 encoded integers.

    iex> Varint.SLEB128.encode(-624485)
    <<155, 241, 89>>

    iex> Varint.SLEB128.decode(<<155, 241, 89>>)
    {-624485, <<>>}

# `decode`

```elixir
@spec decode(binary()) :: {integer(), binary()}
```

  Decodes SLEB128 encoded bytes to a signed integer.

  Returns a tuple where the first element is the decoded value and the second
  element the bytes which have not been parsed.

  This function will raise `ArgumentError` if the given `b` is not a valid SLEB128 integer.

    iex> Varint.SLEB128.decode(<<229, 142, 38>>)
    {624485, <<>>}

    iex> Varint.SLEB128.decode(<<229, 142, 38, 0>>)
    {624485, <<0>>}

    iex> Varint.SLEB128.decode(<<0>>)
    {0, <<>>}

    iex> Varint.SLEB128.decode(<<127>>)
    {-1, <<>>}

    iex> Varint.SLEB128.decode(<<128>>)
    ** (ArgumentError) not a valid SLEB128 encoded integer

# `encode`

```elixir
@spec encode(integer()) :: binary()
```

  Encodes a signed integer using SLEB128 compression.

    iex> Varint.SLEB128.encode(0)
    <<0>>

    iex> Varint.SLEB128.encode(1)
    <<1>>

    iex> Varint.SLEB128.encode(-1)
    <<127>>

    iex> Varint.SLEB128.encode(624485)
    <<229, 142, 38>>

---

*Consult [api-reference.md](api-reference.md) for complete listing*
