///|
fn bytes_to_string(bytes : Bytes, start : Int32, end : Int32) -> String {
let buf = Buffer::Buffer(size_hint=end - start)
for i in start.. String {
@utf8.decode_lossy(buf.to_bytes())
}
///|
/// Extract a substring `[start, end)` from a String, indexed by UTF-16 code
/// unit and clamped to valid character boundaries.
fn substr(s : String, start : Int32, end : Int32) -> String {
if start >= end || start < 0 {
return ""
}
let s_len = s.length()
let real_end = if end > s_len { s_len } else { end }
let real_start = if start > s_len { s_len } else { start }
s[real_start:real_end].to_owned()
}