code: func Parse(f io.Reader, origin, fileName string, serial int64) (*Zone, error) {
  	tokens := dns.ParseZone(f, dns.Fqdn(origin), fileName)
  	z := NewZone(origin, fileName)
  	seenSOA := false
  	for x := range tokens {
  		if x.Error != nil {
  			return nil, x.Error
  		}
  
  		if !seenSOA && serial >= 0 {
  			if s, ok := x.RR.(*dns.SOA); ok {
  				if s.Serial == uint32(serial) { // same serial
  					return nil, &serialErr{err: "no change in SOA serial", origin: origin, zone: fileName, serial: serial}
  				}
  				seenSOA = true
  			}
  		}
  
  		if err := z.Insert(x.RR); err != nil {
  			return nil, err
  		}
  	}
  	if !seenSOA {
  		return nil, fmt.Errorf("file %q has no SOA record", fileName)
  	}
  
  	return z, nil
  }
docs: // Parse parses the zone in filename and returns a new Zone or an error.
  // If serial >= 0 it will reload the zone, if the SOA hasn't changed
  // it returns an error indicating nothing was read.