///|
pub(all) enum Left[T] {
Left(T, width~ : Int, padding~ : Byte)
}
///|
pub impl[T : @fmt.Format] @fmt.Format for Left[T] with write(
value : Left[T],
buffer : @fmt.Memory,
start : Int,
) {
let Left(value, width~, padding~) = value
let cnt = @fmt.Format::write(value, buffer, start)
let padding_len = width - cnt
if padding_len > 0 {
memory_copy_backward(
dst=buffer,
dst_start=start + padding_len,
src=buffer,
src_start=start,
len=cnt,
)
memory_fill(memory=buffer, start~, len=padding_len, value=padding)
width
} else {
cnt
}
}
///|
pub impl[T : @fmt.Format] @fmt.Format for Left[T] with count(value : Left[T]) {
let Left(value, width~, padding~) = value
let cnt = @fmt.Format::count(value)
if cnt < width {
width
} else {
cnt
}
}