diff options
author | Amjad Ben Hedhili <amjadhedhili@outlook.com> | 2022-10-21 08:25:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-21 09:25:25 +0200 |
commit | 5b195ab0f000d5276ddd9702e51215aaefc3abdb (patch) | |
tree | 7fed0a60c68c31ad5bad0cd34d6c4d8deadc13c7 | |
parent | 1db25ffcd3ae4fefdfe6f52f8a6f17f9efa21048 (diff) | |
download | Nim-5b195ab0f000d5276ddd9702e51215aaefc3abdb.tar.gz |
Add `safe` parameter to `base64.encodeMime` (#20559)
* Improve `encodeMime` signature * `string` to `openArray[char or byte]` * `safe` parameter * Fix * Revert "Fix" This reverts commit a394c505c2ab751621c24fd29b17e97c01251c1f. * Remove encodeMime's openArray overload * Document the `safe` parameter * Add changelog entry
-rw-r--r-- | changelog.md | 1 | ||||
-rw-r--r-- | lib/pure/base64.nim | 14 |
2 files changed, 12 insertions, 3 deletions
diff --git a/changelog.md b/changelog.md index 1cb2328ba..6bca156bc 100644 --- a/changelog.md +++ b/changelog.md @@ -134,6 +134,7 @@ `toggleAttribute`, and `matches` to `std/dom`. - Added [`jsre.hasIndices`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/hasIndices) - Added `capacity` for `string` and `seq` to return the current capacity, see https://github.com/nim-lang/RFCs/issues/460 +- Added `safe` parameter to `base64.encodeMime` [//]: # "Deprecations:" - Deprecated `selfExe` for Nimscript. diff --git a/lib/pure/base64.nim b/lib/pure/base64.nim index 8d19feda4..795820433 100644 --- a/lib/pure/base64.nim +++ b/lib/pure/base64.nim @@ -161,15 +161,23 @@ proc encode*[T: byte|char](s: openArray[T], safe = false): string = assert encode([1'u8, 2, 3, 4, 5]) == "AQIDBAU=" encodeImpl() -proc encode*[T: SomeInteger and not byte](s: openArray[T], safe = false): string {.deprecated: "use `byte` or `char` instead".} = +proc encode*[T: SomeInteger and not byte](s: openArray[T], safe = false): string + {.deprecated: "use `byte` or `char` instead".} = encodeImpl() -proc encodeMime*(s: string, lineLen = 75.Positive, newLine = "\r\n"): string = +proc encodeMime*(s: string, lineLen = 75.Positive, newLine = "\r\n", + safe = false): string = ## Encodes `s` into base64 representation as lines. ## Used in email MIME format, use `lineLen` and `newline`. ## ## This procedure encodes a string according to MIME spec. ## + ## If `safe` is `true` then it will encode using the + ## URL-Safe and Filesystem-safe standard alphabet characters, + ## which substitutes `-` instead of `+` and `_` instead of `/`. + ## * https://en.wikipedia.org/wiki/Base64#URL_applications + ## * https://tools.ietf.org/html/rfc4648#page-7 + ## ## **See also:** ## * `encode proc<#encode,openArray[T]>`_ for encoding an openArray ## * `decode proc<#decode,string>`_ for decoding a string @@ -183,7 +191,7 @@ proc encodeMime*(s: string, lineLen = 75.Positive, newLine = "\r\n"): string = inc idx if s.len == 0: return - let e = encode(s) + let e = encode(s, safe) if e.len <= lineLen or newLine.len == 0: return e result = newString(e.len + newLine.len * ((e.len div lineLen) - int(e.len mod lineLen == 0))) |