Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding the ability to encode/decode to/from Base64 and Base32 #81

Open
asahaf opened this issue Aug 7, 2019 · 9 comments
Open

Adding the ability to encode/decode to/from Base64 and Base32 #81

asahaf opened this issue Aug 7, 2019 · 9 comments
Assignees
Labels
enhancement New feature or request

Comments

@asahaf
Copy link

asahaf commented Aug 7, 2019

I've found myself encoding the UUID to Base64 and Base32 string in multiple projects I worked on.
Do you think it's a good idea if we add this encoding and decoding to this library or that's out of its scope?
Thanks

@zerkms
Copy link
Member

zerkms commented Aug 13, 2019

What's the use case? I personally never seen it encoded anything but binary or hex-string.

@asahaf
Copy link
Author

asahaf commented Aug 13, 2019

One use case is when I use UUIDs in URLs. Base64 produces shorter string representation. in case I need shorter case-insensitive UUID string I use Base32.

@cameracker
Copy link
Collaborator

Equivalent functionality is https://www.npmjs.com/package/short-uuid

@dylan-bourque
Copy link
Member

Personally, I'd argue that this would be an unnecessary extension, since it would essentially be 1-line pass-through calls to base64.UrlEncoding.EncodeToString(u.Bytes()) and base32.StdEncoding.EncodeToString(u.Bytes()).

@cameracker cameracker added the enhancement New feature or request label Jan 26, 2023
@wolfeidau
Copy link

I have a wrapper which uses base58, a handy middle ground which is used widely https://github.com/wolfeidau/shortuuid, as you say it is a pretty simple wrapper around existing UUID libraries.

Keen to migrate this to this library so i can try out v6 UUIDs.

@cameracker
Copy link
Collaborator

cameracker commented Jun 28, 2024

Doing a little research on the topic, I think we should use base58 as is done with @wolfeidau's package.

Similar to Base64, but modified to avoid both non-alphanumeric characters (+ and /) and letters that might look ambiguous when printed (0 – zero, I – capital i, O – capital o and l – lower-case L). Base58 is used to represent bitcoin addresses.[citation needed] Some messaging and social media systems break lines on non-alphanumeric strings. This is avoided by not using URI reserved characters such as +.

https://en.wikipedia.org/wiki/Binary-to-text_encoding#Base58

@cameracker cameracker self-assigned this Jun 28, 2024
@dylan-bourque
Copy link
Member

I think Parse() could be extended easily enough to accommodate decoding base58/base64/base32 strings without disrupting existing functionality, but String(), Format(), and MarshalText() all have established behavior and adding a new Base58String() method feels clunky.

@cameracker
Copy link
Collaborator

cameracker commented Jul 1, 2024

I agree on the clunkiness and the potential verbosity of maintaining a bunch of permutations of different base values. How would you feel about a pair of functions that worked like String() and Parse() and we just be opinionated about it being base58?

Short()
FromShort()

@dylan-bourque
Copy link
Member

I don't really like Short()/FromShort(). Those names feel obtuse to me and would obviously need documentation to clarify what they do. If we pick base58 then I would go with explicit Base58String()/FromBase58String(). It's clunky but it's also obvious and unsurprising, which I think is more important for a library like this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

5 participants