package multibase

import (
	
	
)

// Encoder is a multibase encoding that is verified to be supported and
// supports an Encode method that does not return an error
type Encoder struct {
	enc Encoding
}

// NewEncoder create a new Encoder from an Encoding
func ( Encoding) (Encoder, error) {
	,  := EncodingToStr[]
	if ! {
		return Encoder{-1}, fmt.Errorf("unsupported multibase encoding: %d", )
	}
	return Encoder{}, nil
}

// MustNewEncoder is like NewEncoder but will panic if the encoding is
// invalid.
func ( Encoding) Encoder {
	,  := EncodingToStr[]
	if ! {
		panic("Unsupported multibase encoding")
	}
	return Encoder{}
}

// EncoderByName creates an encoder from a string, the string can
// either be the multibase name or single character multibase prefix
func ( string) (Encoder, error) {
	var  Encoding
	var  bool
	if len() == 0 {
		return Encoder{-1}, fmt.Errorf("empty multibase encoding")
	} else if utf8.RuneCountInString() == 1 {
		,  := utf8.DecodeRuneInString()
		 = Encoding()
		_,  = EncodingToStr[]
	} else {
		,  = Encodings[]
	}
	if ! {
		return Encoder{-1}, fmt.Errorf("unsupported multibase encoding: %s", )
	}
	return Encoder{}, nil
}

func ( Encoder) () Encoding {
	return .enc
}

// Encode encodes the multibase using the given Encoder.
func ( Encoder) ( []byte) string {
	,  := Encode(.enc, )
	if  != nil {
		// should not happen
		panic()
	}
	return 
}