code: func (enc *Encoder) encodeMap(v reflect.Value) (int, error) {
  	// Number of elements.
  	n, err := enc.EncodeUint(uint32(v.Len()))
  	if err != nil {
  		return n, err
  	}
  
  	// Encode each key and value according to their type.
  	for _, key := range v.MapKeys() {
  		n2, err := enc.encode(key)
  		n += n2
  		if err != nil {
  			return n, err
  		}
  
  		n2, err = enc.encode(v.MapIndex(key))
  		n += n2
  		if err != nil {
  			return n, err
  		}
  	}
  
  	return n, nil
  }
docs: // RFC Section 4.15 - Discriminated Union
  // RFC Section 4.16 - Void
  // RFC Section 4.17 - Constant
  // RFC Section 4.18 - Typedef
  // RFC Section 4.19 - Optional data
  // RFC Sections 4.15 though 4.19 only apply to the data specification language
  // which is not implemented by this package.  In the case of discriminated
  // unions, struct tags are used to perform a similar function.
  // encodeMap treats the map represented by the passed reflection value as a
  // variable-length array of 2-element structures whose fields are of the same
  // type as the map keys and elements and writes its XDR encoded representation
  // to the encapsulated writer.  It returns the number of bytes written.
  //
  // A MarshalError is returned if any issues are encountered while encoding
  // the elements.