# SPDX-FileCopyrightText: ☭ Emery Hemingway # SPDX-License-Identifier: Unlicense import std/uri import preserves proc toPreserveOrNull(s: string; E: typedesc): Preserve[E] = if s != "": result = toPreserve(s, E) proc toPreserveHook*(u: Uri; E: typedesc): Preserve[E] = ## Best-effort preservation of the `Uri` type. runnableExamples: from std/unittest import check import std/uri import preserves var u = parseUri"https://bidstonobservatory.org" check $(u.toPreserve) == """""" initRecord("uri", u.scheme.toPreserve(E), toPreserve([ u.username.toPreserveOrNull(E), u.password.toPreserveOrNull(E), u.hostname.toPreserveOrNull(E), u.port.toPreserveOrNull(E), ]), u.path.toPreserveOrNull(E), u.query.toPreserveOrNull(E), u.anchor.toPreserveOrNull(E), ) proc fromPreserveHook*[E](u: var Uri; pr: Preserve[E]): bool = ## Best-effort preservation of the `Uri` type. runnableExamples: import std/uri import preserves var u: Uri doAssert fromPreserveHook(u, parsePreserves"""""") if pr.isRecord("uri", 5): result = fromPreserve(u.scheme, pr[0]) if result: if pr[1].isSequence and pr[1].sequence.len == 4: discard fromPreserve(u.username, pr[1][0]) discard fromPreserve(u.password, pr[1][1]) discard fromPreserve(u.hostname, pr[1][2]) discard fromPreserve(u.port, pr[1][3]) discard fromPreserve(u.path, pr[2]) discard fromPreserve(u.query, pr[3]) discard fromPreserve(u.anchor, pr[4])