package gojay

// EncodeString encodes a string to
func ( *Encoder) ( string) error {
	if .isPooled == 1 {
		panic(InvalidUsagePooledEncoderError("Invalid usage of pooled encoder"))
	}
	_, _ = .encodeString()
	,  := .Write()
	if  != nil {
		.err = 
		return 
	}
	return nil
}

// encodeString encodes a string to
func ( *Encoder) ( string) ([]byte, error) {
	.writeByte('"')
	.writeStringEscape()
	.writeByte('"')
	return .buf, nil
}

// AppendString appends a string to the buffer
func ( *Encoder) ( string) {
	.grow(len() + 2)
	.writeByte('"')
	.writeStringEscape()
	.writeByte('"')
}

// AddString adds a string to be encoded, must be used inside a slice or array encoding (does not encode a key)
func ( *Encoder) ( string) {
	.String()
}

// AddStringOmitEmpty adds a string to be encoded or skips it if it is zero value.
// Must be used inside a slice or array encoding (does not encode a key)
func ( *Encoder) ( string) {
	.StringOmitEmpty()
}

// AddStringNullEmpty adds a string to be encoded or skips it if it is zero value.
// Must be used inside a slice or array encoding (does not encode a key)
func ( *Encoder) ( string) {
	.StringNullEmpty()
}

// AddStringKey adds a string to be encoded, must be used inside an object as it will encode a key
func ( *Encoder) (,  string) {
	.StringKey(, )
}

// AddStringKeyOmitEmpty adds a string to be encoded or skips it if it is zero value.
// Must be used inside an object as it will encode a key
func ( *Encoder) (,  string) {
	.StringKeyOmitEmpty(, )
}

// AddStringKeyNullEmpty adds a string to be encoded or skips it if it is zero value.
// Must be used inside an object as it will encode a key
func ( *Encoder) (,  string) {
	.StringKeyNullEmpty(, )
}

// String adds a string to be encoded, must be used inside a slice or array encoding (does not encode a key)
func ( *Encoder) ( string) {
	.grow(len() + 4)
	 := .getPreviousRune()
	if  != '[' {
		.writeTwoBytes(',', '"')
	} else {
		.writeByte('"')
	}
	.writeStringEscape()
	.writeByte('"')
}

// StringOmitEmpty adds a string to be encoded or skips it if it is zero value.
// Must be used inside a slice or array encoding (does not encode a key)
func ( *Encoder) ( string) {
	if  == "" {
		return
	}
	 := .getPreviousRune()
	if  != '[' {
		.writeTwoBytes(',', '"')
	} else {
		.writeByte('"')
	}
	.writeStringEscape()
	.writeByte('"')
}

// StringNullEmpty adds a string to be encoded or skips it if it is zero value.
// Must be used inside a slice or array encoding (does not encode a key)
func ( *Encoder) ( string) {
	 := .getPreviousRune()
	if  == "" {
		if  != '[' {
			.writeByte(',')
			.writeBytes(nullBytes)
		} else {
			.writeBytes(nullBytes)
		}
		return
	}
	if  != '[' {
		.writeTwoBytes(',', '"')
	} else {
		.writeByte('"')
	}
	.writeStringEscape()
	.writeByte('"')
}

// StringKey adds a string to be encoded, must be used inside an object as it will encode a key
func ( *Encoder) (,  string) {
	if .hasKeys {
		if !.keyExists() {
			return
		}
	}
	.grow(len() + len() + 5)
	 := .getPreviousRune()
	if  != '{' {
		.writeTwoBytes(',', '"')
	} else {
		.writeByte('"')
	}
	.writeStringEscape()
	.writeBytes(objKeyStr)
	.writeStringEscape()
	.writeByte('"')
}

// StringKeyOmitEmpty adds a string to be encoded or skips it if it is zero value.
// Must be used inside an object as it will encode a key
func ( *Encoder) (,  string) {
	if .hasKeys {
		if !.keyExists() {
			return
		}
	}
	if  == "" {
		return
	}
	.grow(len() + len() + 5)
	 := .getPreviousRune()
	if  != '{' {
		.writeTwoBytes(',', '"')
	} else {
		.writeByte('"')
	}
	.writeStringEscape()
	.writeBytes(objKeyStr)
	.writeStringEscape()
	.writeByte('"')
}

// StringKeyNullEmpty adds a string to be encoded or skips it if it is zero value.
// Must be used inside an object as it will encode a key
func ( *Encoder) (,  string) {
	if .hasKeys {
		if !.keyExists() {
			return
		}
	}
	.grow(len() + len() + 5)
	 := .getPreviousRune()
	if  != '{' {
		.writeTwoBytes(',', '"')
	} else {
		.writeByte('"')
	}
	.writeStringEscape()
	.writeBytes(objKey)
	if  == "" {
		.writeBytes(nullBytes)
		return
	}
	.writeByte('"')
	.writeStringEscape()
	.writeByte('"')
}