blob: ce7ed9b8343731a139da929498961474cc307316 (
plain) (
tree)
|
|
{ depot, lib, ... }:
let
inherit (depot.users.sterni.nix)
char
int
string
;
reserved = c: builtins.elem c [
"!" "#" "$" "&" "'" "(" ")"
"*" "+" "," "/" ":" ";" "="
"?" "@" "[" "]"
];
unreserved = c: char.asciiAlphaNum c
|| builtins.elem c [ "-" "_" "." "~" ];
percentEncode = c:
if unreserved c
then c
else "%" + (string.fit {
width = 2;
char = "0";
side = "left";
} (int.toHex (char.ord c)));
encode = { leaveReserved ? false }: s:
let
chars = lib.stringToCharacters s;
tr = c:
if leaveReserved && reserved c
then c
else percentEncode c;
in lib.concatStrings (builtins.map tr chars);
in {
inherit
encode
;
}
|