Packages
mist
4.0.2
6.0.3
6.0.2
6.0.1
6.0.0
5.0.4
5.0.3
5.0.2
5.0.1
5.0.0
5.0.0-rc1
4.0.7
4.0.6
4.0.5
4.0.4
4.0.3
4.0.2
4.0.1
4.0.0
3.0.0
2.0.0
1.2.0
1.1.0
1.0.0
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
0.17.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.3
a misty Gleam web server
Current section
Files
Jump to
Current section
Files
src/mist/internal/buffer.gleam
import gleam/bit_array
import gleam/int
pub type Buffer {
Buffer(remaining: Int, data: BitArray)
}
pub fn empty() -> Buffer {
Buffer(remaining: 0, data: <<>>)
}
pub fn new(data: BitArray) -> Buffer {
Buffer(remaining: 0, data: data)
}
pub fn append(buffer: Buffer, data: BitArray) -> Buffer {
let data_size = bit_array.byte_size(data)
let remaining = int.max(buffer.remaining - data_size, 0)
Buffer(data: <<buffer.data:bits, data:bits>>, remaining: remaining)
}
pub fn slice(buffer: Buffer, bits: Int) -> #(BitArray, BitArray) {
let bytes = bits * 8
case buffer.data {
<<value:bits-size(bytes), rest:bits>> -> #(value, rest)
_ -> #(buffer.data, <<>>)
}
}
pub fn with_capacity(buffer: Buffer, size: Int) -> Buffer {
Buffer(..buffer, remaining: size)
}
pub fn size(remaining: Int) -> Buffer {
Buffer(data: <<>>, remaining: remaining)
}