package qlog

import (
	

	
	
)

type encoderHelper struct {
	enc *jsontext.Encoder
	err error
}

func ( *encoderHelper) ( jsontext.Token) {
	if .err != nil {
		return
	}
	.err = .enc.WriteToken()
}

type RawInfo struct {
	Length        int // full packet length, including header and AEAD authentication tag
	PayloadLength int // length of the packet payload, excluding AEAD tag
}

func ( RawInfo) () bool {
	return .Length != 0 || .PayloadLength != 0
}

func ( RawInfo) ( *jsontext.Encoder) error {
	 := encoderHelper{enc: }
	.WriteToken(jsontext.BeginObject)
	if .Length != 0 {
		.WriteToken(jsontext.String("length"))
		.WriteToken(jsontext.Uint(uint64(.Length)))
	}
	if .PayloadLength != 0 {
		.WriteToken(jsontext.String("payload_length"))
		.WriteToken(jsontext.Uint(uint64(.PayloadLength)))
	}
	.WriteToken(jsontext.EndObject)
	return .err
}

type FrameParsed struct {
	StreamID quic.StreamID
	Raw      RawInfo
	Frame    Frame
}

func ( FrameParsed) () string { return "http3:frame_parsed" }

func ( FrameParsed) ( *jsontext.Encoder,  time.Time) error {
	 := encoderHelper{enc: }
	.WriteToken(jsontext.BeginObject)
	.WriteToken(jsontext.String("stream_id"))
	.WriteToken(jsontext.Uint(uint64(.StreamID)))
	if .Raw.HasValues() {
		.WriteToken(jsontext.String("raw"))
		if  := .Raw.encode();  != nil {
			return 
		}
	}
	.WriteToken(jsontext.String("frame"))
	if  := .Frame.encode();  != nil {
		return 
	}
	.WriteToken(jsontext.EndObject)
	return .err
}

type FrameCreated struct {
	StreamID quic.StreamID
	Raw      RawInfo
	Frame    Frame
}

func ( FrameCreated) () string { return "http3:frame_created" }

func ( FrameCreated) ( *jsontext.Encoder,  time.Time) error {
	 := encoderHelper{enc: }
	.WriteToken(jsontext.BeginObject)
	.WriteToken(jsontext.String("stream_id"))
	.WriteToken(jsontext.Uint(uint64(.StreamID)))
	if .Raw.HasValues() {
		.WriteToken(jsontext.String("raw"))
		if  := .Raw.encode();  != nil {
			return 
		}
	}
	.WriteToken(jsontext.String("frame"))
	if  := .Frame.encode();  != nil {
		return 
	}
	.WriteToken(jsontext.EndObject)
	return .err
}

type DatagramCreated struct {
	QuaterStreamID uint64
	Raw            RawInfo
}

func ( DatagramCreated) () string { return "http3:datagram_created" }

func ( DatagramCreated) ( *jsontext.Encoder,  time.Time) error {
	 := encoderHelper{enc: }
	.WriteToken(jsontext.BeginObject)
	.WriteToken(jsontext.String("quater_stream_id"))
	.WriteToken(jsontext.Uint(.QuaterStreamID))
	.WriteToken(jsontext.String("raw"))
	if  := .Raw.encode();  != nil {
		return 
	}
	.WriteToken(jsontext.EndObject)
	return .err
}

type DatagramParsed struct {
	QuaterStreamID uint64
	Raw            RawInfo
}

func ( DatagramParsed) () string { return "http3:datagram_parsed" }

func ( DatagramParsed) ( *jsontext.Encoder,  time.Time) error {
	 := encoderHelper{enc: }
	.WriteToken(jsontext.BeginObject)
	.WriteToken(jsontext.String("quater_stream_id"))
	.WriteToken(jsontext.Uint(.QuaterStreamID))
	.WriteToken(jsontext.String("raw"))
	if  := .Raw.encode();  != nil {
		return 
	}
	.WriteToken(jsontext.EndObject)
	return .err
}