mirror of https://github.com/waku-org/nwaku.git
43 lines
1.1 KiB
Nim
43 lines
1.1 KiB
Nim
when (NimMajor, NimMinor) < (1, 4):
|
|
{.push raises: [Defect].}
|
|
else:
|
|
{.push raises: [].}
|
|
|
|
import stew/[results, byteutils, base64]
|
|
|
|
|
|
type Base64String* = distinct string
|
|
|
|
|
|
proc encode*[T: byte|char](value: openArray[T]): Base64String =
|
|
Base64String(encode(Base64Pad, value))
|
|
|
|
proc encode*(value: string): Base64String =
|
|
encode(toBytes(value))
|
|
|
|
|
|
proc decode[T: byte|char](btype: typedesc[Base64Types],
|
|
instr: openArray[T]): Result[seq[byte], string] =
|
|
## Decode BASE64 string ``instr`` and return sequence of bytes as result.
|
|
if len(instr) == 0:
|
|
return ok(newSeq[byte]())
|
|
|
|
var bufferLen = decodedLength(btype, len(instr))
|
|
var buffer = newSeq[byte](bufferLen)
|
|
|
|
if decode(btype, instr, buffer, bufferLen) != Base64Status.Success:
|
|
return err("Incorrect base64 string")
|
|
|
|
buffer.setLen(bufferLen)
|
|
ok(buffer)
|
|
|
|
proc decode*(t: Base64String): Result[seq[byte], string] =
|
|
decode(Base64Pad, string(t))
|
|
|
|
|
|
proc `$`*(t: Base64String): string {.inline.}=
|
|
string(t)
|
|
|
|
proc `==`*(lhs: Base64String|string, rhs: Base64String|string): bool {.inline.}=
|
|
string(lhs) == string(rhs)
|