If it’s not clear, atoushould not handle termination as it’s taking a non terminated slice, even if it took a terminated slice, the terminator should be after the slice, as described by its len, though you should check that in safe build modes.
As a matter of interest, Zig has a separate data structure for sentinel-terminated slices. In this case [:0]u8, but in fact any sentinel can be used.
For sentinel terminated slices, slice[slice.len] is valid, and will return the sentinel. Therefore slice[0...slice.len] will return the non-terminated subsection of that slice, as a []u8.
Note that the sentinel value is permitted inside the prefixed section of the slice, although in practice, weird things are likely to occur if this is the case.