You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Encoder class only accepts encoding names, not prefix characters #39
The Encoder class only accepts encoding name strings (e.g., "base16"). go-multibase's EncoderByName() accepts both names and single-character prefix codes (e.g., "f" for base16), making it more flexible for CLI tools and config-driven encoding.
// Go: both workenc1, _:=EncoderByName("base16") // by nameenc2, _:=EncoderByName("f") // by single-char prefix
The implementation checks if the string is a single Unicode rune and treats it as a prefix code:
funcEncoderByName(strstring) (Encoder, error) {
ifutf8.RuneCountInString(str) ==1 {
r, _:=utf8.DecodeRuneInString(str)
base=Encoding(r) // treat as prefix code
} else {
base=Encodings[str] // treat as name
}
}
Proposed Solution
Add an encoder_by_name() factory function (keeping Encoder.__init__ unchanged for backward compatibility):
defencoder_by_name(name_or_prefix: str) ->Encoder:
"""Create an Encoder from a name or single-character prefix. >>> encoder_by_name("base16") # by name >>> encoder_by_name("f") # by prefix character >>> encoder_by_name("🚀") # by emoji prefix (base256emoji) """# Try as name firstifname_or_prefixinENCODINGS_LOOKUP:
returnEncoder(name_or_prefix)
# Try as single-character prefixprefix_bytes=name_or_prefix.encode("utf-8")
ifprefix_bytesinENCODINGS_LOOKUP:
codec=ENCODINGS_LOOKUP[prefix_bytes]
returnEncoder(codec.encoding)
raiseUnsupportedEncodingError(
f"Encoding {name_or_prefix!r} not supported."
)
Activity
Add newsfragment for multiformats#39
Add newsfragment for multiformats#39