code: func (p *Decoder) unmarshalInterface(val Unmarshaler, start *StartElement) error {
  	// Record that decoder must stop at end tag corresponding to start.
  	p.pushEOF()
  
  	p.unmarshalDepth++
  	err := val.UnmarshalXML(p, *start)
  	p.unmarshalDepth--
  	if err != nil {
  		p.popEOF()
  		return err
  	}
  
  	if !p.popEOF() {
  		return fmt.Errorf("xml: %s.UnmarshalXML did not consume entire <%s> element", receiverType(val), start.Name.Local)
  	}
  
  	return nil
  }
docs: // unmarshalInterface unmarshals a single XML element into val.
  // start is the opening tag of the element.