func()

in model/marshal.go [126:211]


func (v *URL) MarshalFastJSON(w *fastjson.Writer) error {
	w.RawByte('{')
	first := true
	if v.Hash != "" {
		const prefix = ",\"hash\":"
		if first {
			first = false
			w.RawString(prefix[1:])
		} else {
			w.RawString(prefix)
		}
		w.String(v.Hash)
	}
	if v.Hostname != "" {
		const prefix = ",\"hostname\":"
		if first {
			first = false
			w.RawString(prefix[1:])
		} else {
			w.RawString(prefix)
		}
		w.String(v.Hostname)
	}
	if v.Path != "" {
		const prefix = `,"pathname":"`
		if first {
			first = false
			w.RawString(prefix[1:])
		} else {
			w.RawString(prefix)
		}
		if v.Path[0] != '/' {
			w.RawByte('/')
		}
		w.StringContents(v.Path)
		w.RawByte('"')
	}
	if v.Port != "" {
		const prefix = ",\"port\":"
		if first {
			first = false
			w.RawString(prefix[1:])
		} else {
			w.RawString(prefix)
		}
		w.String(v.Port)
	}
	schemeBegin := -1
	schemeEnd := -1
	if v.Protocol != "" {
		before := w.Size()
		const prefix = ",\"protocol\":\""
		if first {
			first = false
			w.RawString(prefix[1:])
		} else {
			w.RawString(prefix)
		}
		schemeBegin = w.Size()
		if marshalScheme(w, v.Protocol) {
			schemeEnd = w.Size()
			w.RawByte('"')
		} else {
			w.Rewind(before)
		}
	}
	if v.Search != "" {
		const prefix = ",\"search\":"
		if first {
			first = false
			w.RawString(prefix[1:])
		} else {
			w.RawString(prefix)
		}
		w.String(v.Search)
	}
	if schemeEnd != -1 && v.Hostname != "" {
		before := w.Size()
		w.RawString(",\"full\":")
		if !v.marshalFullURL(w, w.Bytes()[schemeBegin:schemeEnd]) {
			w.Rewind(before)
		}
	}
	w.RawByte('}')
	return nil
}