parent
c217571213
commit
bc0d45885a
@ -0,0 +1,84 @@
|
||||
// ------------------------------------------------------------------------
|
||||
// Project atila
|
||||
// Active Thing (activething.com) git.activething.com/go
|
||||
//
|
||||
// File name gogo.go
|
||||
// Created by DEV
|
||||
// Modified 18/01/2024
|
||||
//
|
||||
// Copyright 2024 activething.com
|
||||
// ------------------------------------------------------------------------
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
package jjson
|
||||
|
||||
import (
|
||||
"activething.com/go/gogo/core/syncs"
|
||||
"unicode/utf8"
|
||||
)
|
||||
|
||||
var (
|
||||
G = struct {
|
||||
|
||||
sentinel uint32
|
||||
builderPool *syncs.Pool[Builder]
|
||||
|
||||
hex string
|
||||
jsonChars [utf8.RuneSelf]jsonCharAtt
|
||||
|
||||
sep byte
|
||||
nullValue []byte
|
||||
zeroValue []byte
|
||||
trueValue []byte
|
||||
falseValue []byte
|
||||
mapEmpty []byte
|
||||
listEmpty []byte
|
||||
objectEmpty []byte
|
||||
stringEmpty []byte
|
||||
floatNaN []byte
|
||||
floatInfPos []byte
|
||||
floatInfNeg []byte
|
||||
}{
|
||||
|
||||
hex: "0123456789abcdef",
|
||||
jsonChars: initJSONChars(),
|
||||
|
||||
sep: ',',
|
||||
nullValue: []byte{'n', 'u', 'l', 'l'},
|
||||
zeroValue: []byte{'0'},
|
||||
trueValue: []byte{'"','t', 'r', 'u', 'e','"'},
|
||||
falseValue: []byte{'"','f', 'a', 'l', 's', 'e','"'},
|
||||
mapEmpty: []byte{'{', '}'},
|
||||
objectEmpty: []byte{'{', '}'},
|
||||
listEmpty: []byte{'[', ']'},
|
||||
stringEmpty: []byte{'"', '"'},
|
||||
floatNaN: []byte{'"', 'N', 'a', 'N', '"'},
|
||||
floatInfPos: []byte{'"', 'I', 'n', 'f', '"'},
|
||||
floatInfNeg: []byte{'"', '-', 'I', 'n', 'f', '"'},
|
||||
}
|
||||
)
|
||||
|
||||
func initJSONChars() [utf8.RuneSelf]jsonCharAtt {
|
||||
var tb = [utf8.RuneSelf]jsonCharAtt{
|
||||
'"': jsonCharAttAllUnsafe,
|
||||
'&': jsonCharAttHtmlUnsafe,
|
||||
'<': jsonCharAttHtmlUnsafe,
|
||||
'>': jsonCharAttHtmlUnsafe,
|
||||
'\\': jsonCharAttAllUnsafe,
|
||||
}
|
||||
for i := 0; i <= 31; i++ {
|
||||
tb[i] = jsonCharAttAllUnsafe
|
||||
}
|
||||
return tb
|
||||
}
|
||||
@ -0,0 +1,42 @@
|
||||
// ------------------------------------------------------------------------
|
||||
// Project atila
|
||||
// Active Thing (activething.com) git.activething.com/go
|
||||
//
|
||||
// File name json_char_atts.go
|
||||
// Created by DEV
|
||||
// Modified 18/01/2024
|
||||
//
|
||||
// Copyright 2024 activething.com
|
||||
// ------------------------------------------------------------------------
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
package jjson
|
||||
|
||||
|
||||
const (
|
||||
jsonCharAttUnsafe jsonCharAtt = 1 << iota
|
||||
jsonCharAttHtmlUnsafe
|
||||
|
||||
jsonCharAttAllUnsafe = jsonCharAttUnsafe | jsonCharAttHtmlUnsafe
|
||||
)
|
||||
|
||||
type jsonCharAtt uint8
|
||||
|
||||
func (a jsonCharAtt) isUnsafe() bool {
|
||||
return a&jsonCharAttUnsafe != 0
|
||||
}
|
||||
|
||||
func (a jsonCharAtt) isHtmlUnsafe() bool {
|
||||
return a&jsonCharAttHtmlUnsafe != 0
|
||||
}
|
||||
@ -0,0 +1,61 @@
|
||||
// ------------------------------------------------------------------------
|
||||
// Project atila
|
||||
// Active Thing (activething.com) git.activething.com/go
|
||||
//
|
||||
// File name options.go
|
||||
// Created by DEV
|
||||
// Modified 18/01/2024
|
||||
//
|
||||
// Copyright 2024 activething.com
|
||||
// ------------------------------------------------------------------------
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
package jjson
|
||||
|
||||
const (
|
||||
|
||||
JSONOptionsQuote Options = 1 << iota
|
||||
JSONOptionsEscapeHTML
|
||||
JSONOptionsIgnoreKeys
|
||||
JSONOptionsQuoteFloats
|
||||
JSONOptionsIgnoreDefaults
|
||||
|
||||
jsonOptionsDefaults = JSONOptionsQuote | JSONOptionsEscapeHTML
|
||||
|
||||
)
|
||||
|
||||
type Options uint8
|
||||
|
||||
|
||||
|
||||
|
||||
func (o Options) Quoted() bool {
|
||||
return o&JSONOptionsQuote != 0
|
||||
}
|
||||
|
||||
func (o Options) QuoteFloats() bool {
|
||||
return o&JSONOptionsQuoteFloats != 0
|
||||
}
|
||||
|
||||
func (o Options) EscapeHTML() bool {
|
||||
return o&JSONOptionsEscapeHTML != 0
|
||||
}
|
||||
|
||||
func (o Options) IgnoreKeys() bool {
|
||||
return o&JSONOptionsIgnoreKeys != 0
|
||||
}
|
||||
|
||||
func (o Options) IgnoreDefaults() bool {
|
||||
return o&JSONOptionsIgnoreDefaults != 0
|
||||
}
|
||||
@ -0,0 +1,52 @@
|
||||
// ------------------------------------------------------------------------
|
||||
// Project atila
|
||||
// Active Thing (activething.com) git.activething.com/go
|
||||
//
|
||||
// File name packer.go
|
||||
// Created by DEV
|
||||
// Modified 22/01/2024
|
||||
//
|
||||
// Copyright 2024 activething.com
|
||||
// ------------------------------------------------------------------------
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
package jjson
|
||||
|
||||
import "activething.com/go/gogo/core/errs"
|
||||
|
||||
type (
|
||||
|
||||
|
||||
JSONPacker struct {}
|
||||
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
func (p JSONPacker) Pack (value any) (d []byte, e error) {
|
||||
dn := false
|
||||
defer func (v *bool, er *error) {
|
||||
if !(*v) {
|
||||
*er = errs.ToError(recover())
|
||||
}
|
||||
}(&dn,&e)
|
||||
|
||||
bd := AcquireBuilder()
|
||||
bd.Any(value)
|
||||
dn = true
|
||||
|
||||
return bd.state.Bytes(),bd.state.Error
|
||||
}
|
||||
|
||||
Loading…
Reference in new issue