Skip to content

Commit

Permalink
wip: restore API
Browse files Browse the repository at this point in the history
  • Loading branch information
inteon committed Apr 12, 2024
1 parent 4f4fbff commit 26b5747
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 25 deletions.
18 changes: 15 additions & 3 deletions fieldpath/serialize-pe.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,14 +113,26 @@ func serializePathElementToWriter(w *builder.JSONBuilder, pe PathElement) error
if _, err := w.Write(peKeySepBytes); err != nil {
return err
}
if err := value.FieldListToJSON(*pe.Key, w); err != nil {
return err
w.WriteByte('{')
nrKeys := len(*pe.Key)
for i, f := range *pe.Key {
if err := w.WriteJSON(f.Name); err != nil {
return err
}
w.WriteByte(':')
if err := w.WriteJSON(f.Value.Unstructured()); err != nil {
return err
}
if i < nrKeys-1 {
w.WriteByte(',')
}
}
w.WriteByte('}')
case pe.Value != nil:
if _, err := w.Write(peValueSepBytes); err != nil {
return err
}
if err := value.ToJSON(*pe.Value, w); err != nil {
if err := w.WriteJSON((*pe.Value).Unstructured()); err != nil {
return err
}
case pe.Index != nil:
Expand Down
24 changes: 23 additions & 1 deletion internal/builder/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func (w noNewlineWriter) Write(p []byte) (n int, err error) {
//go:nocheckptr
func noescape(p unsafe.Pointer) unsafe.Pointer {
x := uintptr(p)
return unsafe.Pointer(x ^ 0) //nolint:unsafeptr
return unsafe.Pointer(x ^ 0)
}

func (r *JSONBuilder) WriteJSON(v interface{}) error {
Expand All @@ -65,3 +65,25 @@ func (r *JSONBuilder) WriteJSON(v interface{}) error {

return nil
}

func MarshalString(input string) ([]byte, error) {
out, err := gojson.Marshal((*string)(noescape(unsafe.Pointer(&input))))
if err != nil {
return nil, err
}

runtime.KeepAlive(input)

return out, nil
}

func MarshalInterface(input interface{}) ([]byte, error) {
out, err := gojson.Marshal((*interface{})(noescape(unsafe.Pointer(&input))))
if err != nil {
return nil, err
}

runtime.KeepAlive(input)

return out, nil
}
19 changes: 0 additions & 19 deletions value/fields.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,25 +71,6 @@ func FieldListFromJSON(input []byte) (FieldList, error) {
return fields, nil
}

// FieldListToJSON is a helper function for producing a JSON document.
func FieldListToJSON(v FieldList, w *builder.JSONBuilder) error {
w.WriteByte('{')
for i, f := range v {
if err := w.WriteJSON(f.Name); err != nil {
return err
}
w.WriteByte(':')
if err := w.WriteJSON(f.Value.Unstructured()); err != nil {
return err
}
if i < len(v)-1 {
w.WriteByte(',')
}
}
w.WriteByte('}')
return nil
}

// Sort sorts the field list by Name.
func (f FieldList) Sort() {
if len(f) < 2 {
Expand Down
4 changes: 2 additions & 2 deletions value/value.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ func FromJSON(input []byte) (Value, error) {
}

// ToJSON is a helper function for producing a JSON document.
func ToJSON(v Value, w *builder.JSONBuilder) error {
return w.WriteJSON(v.Unstructured())
func ToJSON(v Value) ([]byte, error) {
return builder.MarshalInterface(v.Unstructured())
}

// ToYAML marshals a value as YAML.
Expand Down

0 comments on commit 26b5747

Please sign in to comment.