///|
/// Percent-encode a free-form value for one URL path segment or query value:
/// every byte outside RFC 3986 "unreserved" is escaped.
fn percent_encode(value : String) -> String {
let builder = StringBuilder(size_hint=value.length())
for byte in @utf8.encode(value).iter() {
let value = byte.to_int()
let unreserved = (value >= 65 && value <= 90) ||
(value >= 97 && value <= 122) ||
(value >= 48 && value <= 57) ||
value == 45 ||
value == 46 ||
value == 95 ||
value == 126
if unreserved {
builder.write_char(byte.to_char())
} else {
builder.write_char('%')
builder.write_string(byte.to_hex().to_upper())
}
}
builder.to_string()
}