Base64 encode and decode with error handling

Crystal
require "base64"

def encode_token(payload : String) : String
  Base64.strict_encode(payload)
end

def decode_token(token : String) : String
  String.new(Base64.decode(token))
rescue ex : Base64::Error
  raise ArgumentError.new("invalid base64 token: #{ex.message}")
end

token = encode_token("hello world")
puts token                # aGVsbG8gd29ybGQ=
puts decode_token(token)  # hello world