URLs (std::url)
Nesta página
std::url oferece utilitários puros para trabalhar com endereços web: decomposição
em partes, codificação e decodificação percentual, e montagem de query strings.
Como todas as operações são computações locais (sem rede nem sistema de arquivos),
os exemplos rodam diretamente no sandbox.
Parse de URL
url.parse desmembra um endereço em protocol, host, port, path, query,
fragment e um mapa params com os parâmetros já decodificados.
Extrai cada componente de uma URL completa, incluindo params.
// Feature: url.parse — break a URL into protocol, host, port, path, query, fragment
// When to use: extract parts of an address for routing, validation, or logging.
use std::url
let parts = url.parse("https://api.example.com:8443/users/42?id=42&active=true#bio")
print(parts["protocol"]) // expected: https
print(parts["host"]) // expected: api.example.com
print(parts["port"]) // expected: 8443
print(parts["path"]) // expected: /users/42
print(parts["query"]) // expected: id=42&active=true
print(parts["fragment"]) // expected: bio
// Query params are already parsed into params.
print(parts["params"]["id"]) // expected: 42
print(parts["params"]["active"]) // expected: true
Codificação e decodificação percentual
url.encode / url.decode tratam espaços e caracteres especiais; a variante
encode_component / decode_component é mais agressiva e também escapa /,
? e # — ideal para valores dentro de uma query string.
Vai-e-vem entre string bruta e representação percent-encoded.
// Feature: url.encode / url.decode — percent-encoding
// When to use: pass strings with spaces or special characters in URLs.
use std::url
// encode applies percent-encoding to non-safe characters.
let raw = "hello world & friends"
let enc = url.encode(raw)
print(enc) // expected: hello%20world%20%26%20friends
// decode reverses the operation.
print(url.decode(enc)) // expected: hello world & friends
// encode_component is more aggressive — it also escapes /, ?, #.
let comp = url.encode_component("a/b?c=d")
print(comp) // expected: a%2Fb%3Fc%3Dd
let back = url.decode_component(comp)
print(back) // expected: a/b?c=d
Construção de query strings
Combine url.encode_component com concatenação e Array.join para montar
query strings dinamicamente sem depender de bibliotecas externas.
Parse de params existentes e construção manual de query string codificada.
// Feature: url — build and parse query strings
// When to use: HTTP clients, links with filters, pagination.
use std::url
// Parse: query string already comes in `params` when using url.parse.
let parts = url.parse("https://api.example.com/search?q=zolo+lang&page=2&limit=20")
print(parts["params"]["q"]) // expected: zolo+lang
print(parts["params"]["page"]) // expected: 2
print(parts["params"]["limit"]) // expected: 20
// Manual construction: join "k=v" pairs with "&".
fn build_query(pairs: [str]) -> str {
return pairs.join("&")
}
let qs = build_query([
"q=" + url.encode_component("hello world"),
"page=1",
"active=true",
])
print(qs) // expected: q=hello%20world&page=1&active=true
Desafio
A partir de um mapa #{ q: "zolo lang", page: 1 }, escreva uma função
to_query_string que itere as chaves e produza q=zolo%20lang&page=1.
Veja também