// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT.

package cdp

import (
	json "encoding/json"
	easyjson "github.com/mailru/easyjson"
	jlexer "github.com/mailru/easyjson/jlexer"
	jwriter "github.com/mailru/easyjson/jwriter"
)

// suppress unused package warning
var (
	_ *json.RawMessage
	_ *jlexer.Lexer
	_ *jwriter.Writer
	_ easyjson.Marshaler
)

func easyjsonC5a4559bDecodeGithubComChromedpCdprotoCdp(in *jlexer.Lexer, out *RGBA) {
	isTopLevel := in.IsStart()
	if in.IsNull() {
		if isTopLevel {
			in.Consumed()
		}
		in.Skip()
		return
	}
	in.Delim('{')
	for !in.IsDelim('}') {
		key := in.UnsafeString()
		in.WantColon()
		if in.IsNull() {
			in.Skip()
			in.WantComma()
			continue
		}
		switch key {
		case "r":
			out.R = int64(in.Int64())
		case "g":
			out.G = int64(in.Int64())
		case "b":
			out.B = int64(in.Int64())
		case "a":
			out.A = float64(in.Float64())
		default:
			in.SkipRecursive()
		}
		in.WantComma()
	}
	in.Delim('}')
	if isTopLevel {
		in.Consumed()
	}
}
func easyjsonC5a4559bEncodeGithubComChromedpCdprotoCdp(out *jwriter.Writer, in RGBA) {
	out.RawByte('{')
	first := true
	_ = first
	{
		const prefix string = ",\"r\":"
		out.RawString(prefix[1:])
		out.Int64(int64(in.R))
	}
	{
		const prefix string = ",\"g\":"
		out.RawString(prefix)
		out.Int64(int64(in.G))
	}
	{
		const prefix string = ",\"b\":"
		out.RawString(prefix)
		out.Int64(int64(in.B))
	}
	if in.A != 0 {
		const prefix string = ",\"a\":"
		out.RawString(prefix)
		out.Float64(float64(in.A))
	}
	out.RawByte('}')
}

// MarshalJSON supports json.Marshaler interface
func (v RGBA) MarshalJSON() ([]byte, error) {
	w := jwriter.Writer{}
	easyjsonC5a4559bEncodeGithubComChromedpCdprotoCdp(&w, v)
	return w.Buffer.BuildBytes(), w.Error
}

// MarshalEasyJSON supports easyjson.Marshaler interface
func (v RGBA) MarshalEasyJSON(w *jwriter.Writer) {
	easyjsonC5a4559bEncodeGithubComChromedpCdprotoCdp(w, v)
}

// UnmarshalJSON supports json.Unmarshaler interface
func (v *RGBA) UnmarshalJSON(data []byte) error {
	r := jlexer.Lexer{Data: data}
	easyjsonC5a4559bDecodeGithubComChromedpCdprotoCdp(&r, v)
	return r.Error()
}

// UnmarshalEasyJSON supports easyjson.Unmarshaler interface
func (v *RGBA) UnmarshalEasyJSON(l *jlexer.Lexer) {
	easyjsonC5a4559bDecodeGithubComChromedpCdprotoCdp(l, v)
}
func easyjsonC5a4559bDecodeGithubComChromedpCdprotoCdp1(in *jlexer.Lexer, out *Node) {
	isTopLevel := in.IsStart()
	if in.IsNull() {
		if isTopLevel {
			in.Consumed()
		}
		in.Skip()
		return
	}
	in.Delim('{')
	for !in.IsDelim('}') {
		key := in.UnsafeString()
		in.WantColon()
		if in.IsNull() {
			in.Skip()
			in.WantComma()
			continue
		}
		switch key {
		case "nodeId":
			(out.NodeID).UnmarshalEasyJSON(in)
		case "parentId":
			(out.ParentID).UnmarshalEasyJSON(in)
		case "backendNodeId":
			(out.BackendNodeID).UnmarshalEasyJSON(in)
		case "nodeType":
			(out.NodeType).UnmarshalEasyJSON(in)
		case "nodeName":
			out.NodeName = string(in.String())
		case "localName":
			out.LocalName = string(in.String())
		case "nodeValue":
			out.NodeValue = string(in.String())
		case "childNodeCount":
			out.ChildNodeCount = int64(in.Int64())
		case "children":
			if in.IsNull() {
				in.Skip()
				out.Children = nil
			} else {
				in.Delim('[')
				if out.Children == nil {
					if !in.IsDelim(']') {
						out.Children = make([]*Node, 0, 8)
					} else {
						out.Children = []*Node{}
					}
				} else {
					out.Children = (out.Children)[:0]
				}
				for !in.IsDelim(']') {
					var v1 *Node
					if in.IsNull() {
						in.Skip()
						v1 = nil
					} else {
						if v1 == nil {
							v1 = new(Node)
						}
						(*v1).UnmarshalEasyJSON(in)
					}
					out.Children = append(out.Children, v1)
					in.WantComma()
				}
				in.Delim(']')
			}
		case "attributes":
			if in.IsNull() {
				in.Skip()
				out.Attributes = nil
			} else {
				in.Delim('[')
				if out.Attributes == nil {
					if !in.IsDelim(']') {
						out.Attributes = make([]string, 0, 4)
					} else {
						out.Attributes = []string{}
					}
				} else {
					out.Attributes = (out.Attributes)[:0]
				}
				for !in.IsDelim(']') {
					var v2 string
					v2 = string(in.String())
					out.Attributes = append(out.Attributes, v2)
					in.WantComma()
				}
				in.Delim(']')
			}
		case "documentURL":
			out.DocumentURL = string(in.String())
		case "baseURL":
			out.BaseURL = string(in.String())
		case "publicId":
			out.PublicID = string(in.String())
		case "systemId":
			out.SystemID = string(in.String())
		case "internalSubset":
			out.InternalSubset = string(in.String())
		case "xmlVersion":
			out.XMLVersion = string(in.String())
		case "name":
			out.Name = string(in.String())
		case "value":
			out.Value = string(in.String())
		case "pseudoType":
			(out.PseudoType).UnmarshalEasyJSON(in)
		case "shadowRootType":
			(out.ShadowRootType).UnmarshalEasyJSON(in)
		case "frameId":
			(out.FrameID).UnmarshalEasyJSON(in)
		case "contentDocument":
			if in.IsNull() {
				in.Skip()
				out.ContentDocument = nil
			} else {
				if out.ContentDocument == nil {
					out.ContentDocument = new(Node)
				}
				(*out.ContentDocument).UnmarshalEasyJSON(in)
			}
		case "shadowRoots":
			if in.IsNull() {
				in.Skip()
				out.ShadowRoots = nil
			} else {
				in.Delim('[')
				if out.ShadowRoots == nil {
					if !in.IsDelim(']') {
						out.ShadowRoots = make([]*Node, 0, 8)
					} else {
						out.ShadowRoots = []*Node{}
					}
				} else {
					out.ShadowRoots = (out.ShadowRoots)[:0]
				}
				for !in.IsDelim(']') {
					var v3 *Node
					if in.IsNull() {
						in.Skip()
						v3 = nil
					} else {
						if v3 == nil {
							v3 = new(Node)
						}
						(*v3).UnmarshalEasyJSON(in)
					}
					out.ShadowRoots = append(out.ShadowRoots, v3)
					in.WantComma()
				}
				in.Delim(']')
			}
		case "templateContent":
			if in.IsNull() {
				in.Skip()
				out.TemplateContent = nil
			} else {
				if out.TemplateContent == nil {
					out.TemplateContent = new(Node)
				}
				(*out.TemplateContent).UnmarshalEasyJSON(in)
			}
		case "pseudoElements":
			if in.IsNull() {
				in.Skip()
				out.PseudoElements = nil
			} else {
				in.Delim('[')
				if out.PseudoElements == nil {
					if !in.IsDelim(']') {
						out.PseudoElements = make([]*Node, 0, 8)
					} else {
						out.PseudoElements = []*Node{}
					}
				} else {
					out.PseudoElements = (out.PseudoElements)[:0]
				}
				for !in.IsDelim(']') {
					var v4 *Node
					if in.IsNull() {
						in.Skip()
						v4 = nil
					} else {
						if v4 == nil {
							v4 = new(Node)
						}
						(*v4).UnmarshalEasyJSON(in)
					}
					out.PseudoElements = append(out.PseudoElements, v4)
					in.WantComma()
				}
				in.Delim(']')
			}
		case "importedDocument":
			if in.IsNull() {
				in.Skip()
				out.ImportedDocument = nil
			} else {
				if out.ImportedDocument == nil {
					out.ImportedDocument = new(Node)
				}
				(*out.ImportedDocument).UnmarshalEasyJSON(in)
			}
		case "distributedNodes":
			if in.IsNull() {
				in.Skip()
				out.DistributedNodes = nil
			} else {
				in.Delim('[')
				if out.DistributedNodes == nil {
					if !in.IsDelim(']') {
						out.DistributedNodes = make([]*BackendNode, 0, 8)
					} else {
						out.DistributedNodes = []*BackendNode{}
					}
				} else {
					out.DistributedNodes = (out.DistributedNodes)[:0]
				}
				for !in.IsDelim(']') {
					var v5 *BackendNode
					if in.IsNull() {
						in.Skip()
						v5 = nil
					} else {
						if v5 == nil {
							v5 = new(BackendNode)
						}
						(*v5).UnmarshalEasyJSON(in)
					}
					out.DistributedNodes = append(out.DistributedNodes, v5)
					in.WantComma()
				}
				in.Delim(']')
			}
		case "isSVG":
			out.IsSVG = bool(in.Bool())
		default:
			in.SkipRecursive()
		}
		in.WantComma()
	}
	in.Delim('}')
	if isTopLevel {
		in.Consumed()
	}
}
func easyjsonC5a4559bEncodeGithubComChromedpCdprotoCdp1(out *jwriter.Writer, in Node) {
	out.RawByte('{')
	first := true
	_ = first
	{
		const prefix string = ",\"nodeId\":"
		out.RawString(prefix[1:])
		out.Int64(int64(in.NodeID))
	}
	if in.ParentID != 0 {
		const prefix string = ",\"parentId\":"
		out.RawString(prefix)
		out.Int64(int64(in.ParentID))
	}
	{
		const prefix string = ",\"backendNodeId\":"
		out.RawString(prefix)
		out.Int64(int64(in.BackendNodeID))
	}
	{
		const prefix string = ",\"nodeType\":"
		out.RawString(prefix)
		(in.NodeType).MarshalEasyJSON(out)
	}
	{
		const prefix string = ",\"nodeName\":"
		out.RawString(prefix)
		out.String(string(in.NodeName))
	}
	{
		const prefix string = ",\"localName\":"
		out.RawString(prefix)
		out.String(string(in.LocalName))
	}
	{
		const prefix string = ",\"nodeValue\":"
		out.RawString(prefix)
		out.String(string(in.NodeValue))
	}
	if in.ChildNodeCount != 0 {
		const prefix string = ",\"childNodeCount\":"
		out.RawString(prefix)
		out.Int64(int64(in.ChildNodeCount))
	}
	if len(in.Children) != 0 {
		const prefix string = ",\"children\":"
		out.RawString(prefix)
		{
			out.RawByte('[')
			for v6, v7 := range in.Children {
				if v6 > 0 {
					out.RawByte(',')
				}
				if v7 == nil {
					out.RawString("null")
				} else {
					(*v7).MarshalEasyJSON(out)
				}
			}
			out.RawByte(']')
		}
	}
	if len(in.Attributes) != 0 {
		const prefix string = ",\"attributes\":"
		out.RawString(prefix)
		{
			out.RawByte('[')
			for v8, v9 := range in.Attributes {
				if v8 > 0 {
					out.RawByte(',')
				}
				out.String(string(v9))
			}
			out.RawByte(']')
		}
	}
	if in.DocumentURL != "" {
		const prefix string = ",\"documentURL\":"
		out.RawString(prefix)
		out.String(string(in.DocumentURL))
	}
	if in.BaseURL != "" {
		const prefix string = ",\"baseURL\":"
		out.RawString(prefix)
		out.String(string(in.BaseURL))
	}
	if in.PublicID != "" {
		const prefix string = ",\"publicId\":"
		out.RawString(prefix)
		out.String(string(in.PublicID))
	}
	if in.SystemID != "" {
		const prefix string = ",\"systemId\":"
		out.RawString(prefix)
		out.String(string(in.SystemID))
	}
	if in.InternalSubset != "" {
		const prefix string = ",\"internalSubset\":"
		out.RawString(prefix)
		out.String(string(in.InternalSubset))
	}
	if in.XMLVersion != "" {
		const prefix string = ",\"xmlVersion\":"
		out.RawString(prefix)
		out.String(string(in.XMLVersion))
	}
	if in.Name != "" {
		const prefix string = ",\"name\":"
		out.RawString(prefix)
		out.String(string(in.Name))
	}
	if in.Value != "" {
		const prefix string = ",\"value\":"
		out.RawString(prefix)
		out.String(string(in.Value))
	}
	if in.PseudoType != "" {
		const prefix string = ",\"pseudoType\":"
		out.RawString(prefix)
		(in.PseudoType).MarshalEasyJSON(out)
	}
	if in.ShadowRootType != "" {
		const prefix string = ",\"shadowRootType\":"
		out.RawString(prefix)
		(in.ShadowRootType).MarshalEasyJSON(out)
	}
	if in.FrameID != "" {
		const prefix string = ",\"frameId\":"
		out.RawString(prefix)
		out.String(string(in.FrameID))
	}
	if in.ContentDocument != nil {
		const prefix string = ",\"contentDocument\":"
		out.RawString(prefix)
		(*in.ContentDocument).MarshalEasyJSON(out)
	}
	if len(in.ShadowRoots) != 0 {
		const prefix string = ",\"shadowRoots\":"
		out.RawString(prefix)
		{
			out.RawByte('[')
			for v10, v11 := range in.ShadowRoots {
				if v10 > 0 {
					out.RawByte(',')
				}
				if v11 == nil {
					out.RawString("null")
				} else {
					(*v11).MarshalEasyJSON(out)
				}
			}
			out.RawByte(']')
		}
	}
	if in.TemplateContent != nil {
		const prefix string = ",\"templateContent\":"
		out.RawString(prefix)
		(*in.TemplateContent).MarshalEasyJSON(out)
	}
	if len(in.PseudoElements) != 0 {
		const prefix string = ",\"pseudoElements\":"
		out.RawString(prefix)
		{
			out.RawByte('[')
			for v12, v13 := range in.PseudoElements {
				if v12 > 0 {
					out.RawByte(',')
				}
				if v13 == nil {
					out.RawString("null")
				} else {
					(*v13).MarshalEasyJSON(out)
				}
			}
			out.RawByte(']')
		}
	}
	if in.ImportedDocument != nil {
		const prefix string = ",\"importedDocument\":"
		out.RawString(prefix)
		(*in.ImportedDocument).MarshalEasyJSON(out)
	}
	if len(in.DistributedNodes) != 0 {
		const prefix string = ",\"distributedNodes\":"
		out.RawString(prefix)
		{
			out.RawByte('[')
			for v14, v15 := range in.DistributedNodes {
				if v14 > 0 {
					out.RawByte(',')
				}
				if v15 == nil {
					out.RawString("null")
				} else {
					(*v15).MarshalEasyJSON(out)
				}
			}
			out.RawByte(']')
		}
	}
	if in.IsSVG {
		const prefix string = ",\"isSVG\":"
		out.RawString(prefix)
		out.Bool(bool(in.IsSVG))
	}
	out.RawByte('}')
}

// MarshalJSON supports json.Marshaler interface
func (v Node) MarshalJSON() ([]byte, error) {
	w := jwriter.Writer{}
	easyjsonC5a4559bEncodeGithubComChromedpCdprotoCdp1(&w, v)
	return w.Buffer.BuildBytes(), w.Error
}

// MarshalEasyJSON supports easyjson.Marshaler interface
func (v Node) MarshalEasyJSON(w *jwriter.Writer) {
	easyjsonC5a4559bEncodeGithubComChromedpCdprotoCdp1(w, v)
}

// UnmarshalJSON supports json.Unmarshaler interface
func (v *Node) UnmarshalJSON(data []byte) error {
	r := jlexer.Lexer{Data: data}
	easyjsonC5a4559bDecodeGithubComChromedpCdprotoCdp1(&r, v)
	return r.Error()
}

// UnmarshalEasyJSON supports easyjson.Unmarshaler interface
func (v *Node) UnmarshalEasyJSON(l *jlexer.Lexer) {
	easyjsonC5a4559bDecodeGithubComChromedpCdprotoCdp1(l, v)
}
func easyjsonC5a4559bDecodeGithubComChromedpCdprotoCdp2(in *jlexer.Lexer, out *Frame) {
	isTopLevel := in.IsStart()
	if in.IsNull() {
		if isTopLevel {
			in.Consumed()
		}
		in.Skip()
		return
	}
	in.Delim('{')
	for !in.IsDelim('}') {
		key := in.UnsafeString()
		in.WantColon()
		if in.IsNull() {
			in.Skip()
			in.WantComma()
			continue
		}
		switch key {
		case "id":
			(out.ID).UnmarshalEasyJSON(in)
		case "parentId":
			(out.ParentID).UnmarshalEasyJSON(in)
		case "loaderId":
			out.LoaderID = LoaderID(in.String())
		case "name":
			out.Name = string(in.String())
		case "url":
			out.URL = string(in.String())
		case "urlFragment":
			out.URLFragment = string(in.String())
		case "securityOrigin":
			out.SecurityOrigin = string(in.String())
		case "mimeType":
			out.MimeType = string(in.String())
		case "unreachableUrl":
			out.UnreachableURL = string(in.String())
		default:
			in.SkipRecursive()
		}
		in.WantComma()
	}
	in.Delim('}')
	if isTopLevel {
		in.Consumed()
	}
}
func easyjsonC5a4559bEncodeGithubComChromedpCdprotoCdp2(out *jwriter.Writer, in Frame) {
	out.RawByte('{')
	first := true
	_ = first
	{
		const prefix string = ",\"id\":"
		out.RawString(prefix[1:])
		out.String(string(in.ID))
	}
	if in.ParentID != "" {
		const prefix string = ",\"parentId\":"
		out.RawString(prefix)
		out.String(string(in.ParentID))
	}
	{
		const prefix string = ",\"loaderId\":"
		out.RawString(prefix)
		out.String(string(in.LoaderID))
	}
	if in.Name != "" {
		const prefix string = ",\"name\":"
		out.RawString(prefix)
		out.String(string(in.Name))
	}
	{
		const prefix string = ",\"url\":"
		out.RawString(prefix)
		out.String(string(in.URL))
	}
	if in.URLFragment != "" {
		const prefix string = ",\"urlFragment\":"
		out.RawString(prefix)
		out.String(string(in.URLFragment))
	}
	{
		const prefix string = ",\"securityOrigin\":"
		out.RawString(prefix)
		out.String(string(in.SecurityOrigin))
	}
	{
		const prefix string = ",\"mimeType\":"
		out.RawString(prefix)
		out.String(string(in.MimeType))
	}
	if in.UnreachableURL != "" {
		const prefix string = ",\"unreachableUrl\":"
		out.RawString(prefix)
		out.String(string(in.UnreachableURL))
	}
	out.RawByte('}')
}

// MarshalJSON supports json.Marshaler interface
func (v Frame) MarshalJSON() ([]byte, error) {
	w := jwriter.Writer{}
	easyjsonC5a4559bEncodeGithubComChromedpCdprotoCdp2(&w, v)
	return w.Buffer.BuildBytes(), w.Error
}

// MarshalEasyJSON supports easyjson.Marshaler interface
func (v Frame) MarshalEasyJSON(w *jwriter.Writer) {
	easyjsonC5a4559bEncodeGithubComChromedpCdprotoCdp2(w, v)
}

// UnmarshalJSON supports json.Unmarshaler interface
func (v *Frame) UnmarshalJSON(data []byte) error {
	r := jlexer.Lexer{Data: data}
	easyjsonC5a4559bDecodeGithubComChromedpCdprotoCdp2(&r, v)
	return r.Error()
}

// UnmarshalEasyJSON supports easyjson.Unmarshaler interface
func (v *Frame) UnmarshalEasyJSON(l *jlexer.Lexer) {
	easyjsonC5a4559bDecodeGithubComChromedpCdprotoCdp2(l, v)
}
func easyjsonC5a4559bDecodeGithubComChromedpCdprotoCdp3(in *jlexer.Lexer, out *BackendNode) {
	isTopLevel := in.IsStart()
	if in.IsNull() {
		if isTopLevel {
			in.Consumed()
		}
		in.Skip()
		return
	}
	in.Delim('{')
	for !in.IsDelim('}') {
		key := in.UnsafeString()
		in.WantColon()
		if in.IsNull() {
			in.Skip()
			in.WantComma()
			continue
		}
		switch key {
		case "nodeType":
			(out.NodeType).UnmarshalEasyJSON(in)
		case "nodeName":
			out.NodeName = string(in.String())
		case "backendNodeId":
			(out.BackendNodeID).UnmarshalEasyJSON(in)
		default:
			in.SkipRecursive()
		}
		in.WantComma()
	}
	in.Delim('}')
	if isTopLevel {
		in.Consumed()
	}
}
func easyjsonC5a4559bEncodeGithubComChromedpCdprotoCdp3(out *jwriter.Writer, in BackendNode) {
	out.RawByte('{')
	first := true
	_ = first
	{
		const prefix string = ",\"nodeType\":"
		out.RawString(prefix[1:])
		(in.NodeType).MarshalEasyJSON(out)
	}
	{
		const prefix string = ",\"nodeName\":"
		out.RawString(prefix)
		out.String(string(in.NodeName))
	}
	{
		const prefix string = ",\"backendNodeId\":"
		out.RawString(prefix)
		out.Int64(int64(in.BackendNodeID))
	}
	out.RawByte('}')
}

// MarshalJSON supports json.Marshaler interface
func (v BackendNode) MarshalJSON() ([]byte, error) {
	w := jwriter.Writer{}
	easyjsonC5a4559bEncodeGithubComChromedpCdprotoCdp3(&w, v)
	return w.Buffer.BuildBytes(), w.Error
}

// MarshalEasyJSON supports easyjson.Marshaler interface
func (v BackendNode) MarshalEasyJSON(w *jwriter.Writer) {
	easyjsonC5a4559bEncodeGithubComChromedpCdprotoCdp3(w, v)
}

// UnmarshalJSON supports json.Unmarshaler interface
func (v *BackendNode) UnmarshalJSON(data []byte) error {
	r := jlexer.Lexer{Data: data}
	easyjsonC5a4559bDecodeGithubComChromedpCdprotoCdp3(&r, v)
	return r.Error()
}

// UnmarshalEasyJSON supports easyjson.Unmarshaler interface
func (v *BackendNode) UnmarshalEasyJSON(l *jlexer.Lexer) {
	easyjsonC5a4559bDecodeGithubComChromedpCdprotoCdp3(l, v)
}
