code: func NewComponent(protocol, value string) (*Component, error) {
  	p := ProtocolWithName(protocol)
  	if p.Code == 0 {
  		return nil, fmt.Errorf("unsupported protocol: %s", protocol)
  	}
  	if p.Transcoder != nil {
  		bts, err := p.Transcoder.StringToBytes(value)
  		if err != nil {
  			return nil, err
  		}
  		return newComponent(p, bts), nil
  	} else if value != "" {
  		return nil, fmt.Errorf("protocol %s doesn't take a value", p.Name)
  	}
  	return newComponent(p, nil), nil
  	// TODO: handle path /?
  }
docs: // NewComponent constructs a new multiaddr component