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
}