func NewFireAndForgetFrame(sid uint32, data, metadata []byte, flag core.FrameFlag) *FireAndForgetFrame {
	if len(metadata) > 0 {
		flag |= core.FlagMetadata
	}
	bb := common.BorrowByteBuff()
	if err := core.WriteFrameHeader(bb, sid, core.FrameTypeRequestFNF, flag); err != nil {
		common.ReturnByteBuff(bb)
		panic(err)
	}
	if len(metadata) > 0 {
		if err := u24.WriteUint24(bb, len(metadata)); err != nil {
			common.ReturnByteBuff(bb)
			panic(err)
		}
		if _, err := bb.Write(metadata); err != nil {
			common.ReturnByteBuff(bb)
			panic(err)
		}
	}
	if _, err := bb.Write(data); err != nil {
		common.ReturnByteBuff(bb)
		panic(err)
	}
	return &FireAndForgetFrame{
		bufferedFrame: newBufferedFrame(bb),
	}
}
NewFireAndForgetFrame returns a new FireAndForgetFrame.
package framing
import (
	"github.com/rsocket/rsocket-go/core"
	"github.com/rsocket/rsocket-go/internal/bytesconv"
	"github.com/rsocket/rsocket-go/internal/common"
	"github.com/rsocket/rsocket-go/internal/u24"
)
type FireAndForgetFrame struct {
	*bufferedFrame
}