mirror of
https://github.com/go-gitea/gitea.git
synced 2024-08-19 02:53:25 +02:00
* update code.gitea.io/sdk/gitea v0.13.1 -> v0.13.2 * update github.com/go-swagger/go-swagger v0.25.0 -> v0.26.0 * update github.com/google/uuid v1.1.2 -> v1.2.0 * update github.com/klauspost/compress v1.11.3 -> v1.11.7 * update github.com/lib/pq 083382b7e6fc -> v1.9.0 * update github.com/markbates/goth v1.65.0 -> v1.66.1 * update github.com/mattn/go-sqlite3 v1.14.4 -> v1.14.6 * update github.com/mgechev/revive 246eac737dc7 -> v1.0.3 * update github.com/minio/minio-go/v7 v7.0.6 -> v7.0.7 * update github.com/niklasfasching/go-org v1.3.2 -> v1.4.0 * update github.com/olivere/elastic/v7 v7.0.21 -> v7.0.22 * update github.com/pquerna/otp v1.2.0 -> v1.3.0 * update github.com/xanzy/go-gitlab v0.39.0 -> v0.42.0 * update github.com/yuin/goldmark v1.2.1 -> v1.3.1
88 lines
3.7 KiB
Go
Vendored
88 lines
3.7 KiB
Go
Vendored
// Copyright (C) MongoDB, Inc. 2017-present.
|
|
//
|
|
// 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
|
|
|
|
package bsonoptions
|
|
|
|
var defaultOverwriteDuplicatedInlinedFields = true
|
|
|
|
// StructCodecOptions represents all possible options for struct encoding and decoding.
|
|
type StructCodecOptions struct {
|
|
DecodeZeroStruct *bool // Specifies if structs should be zeroed before decoding into them. Defaults to false.
|
|
DecodeDeepZeroInline *bool // Specifies if structs should be recursively zeroed when a inline value is decoded. Defaults to false.
|
|
EncodeOmitDefaultStruct *bool // Specifies if default structs should be considered empty by omitempty. Defaults to false.
|
|
AllowUnexportedFields *bool // Specifies if unexported fields should be marshaled/unmarshaled. Defaults to false.
|
|
OverwriteDuplicatedInlinedFields *bool // Specifies if fields in inlined structs can be overwritten by higher level struct fields with the same key. Defaults to true.
|
|
}
|
|
|
|
// StructCodec creates a new *StructCodecOptions
|
|
func StructCodec() *StructCodecOptions {
|
|
return &StructCodecOptions{}
|
|
}
|
|
|
|
// SetDecodeZeroStruct specifies if structs should be zeroed before decoding into them. Defaults to false.
|
|
func (t *StructCodecOptions) SetDecodeZeroStruct(b bool) *StructCodecOptions {
|
|
t.DecodeZeroStruct = &b
|
|
return t
|
|
}
|
|
|
|
// SetDecodeDeepZeroInline specifies if structs should be zeroed before decoding into them. Defaults to false.
|
|
func (t *StructCodecOptions) SetDecodeDeepZeroInline(b bool) *StructCodecOptions {
|
|
t.DecodeDeepZeroInline = &b
|
|
return t
|
|
}
|
|
|
|
// SetEncodeOmitDefaultStruct specifies if default structs should be considered empty by omitempty. A default struct has all
|
|
// its values set to their default value. Defaults to false.
|
|
func (t *StructCodecOptions) SetEncodeOmitDefaultStruct(b bool) *StructCodecOptions {
|
|
t.EncodeOmitDefaultStruct = &b
|
|
return t
|
|
}
|
|
|
|
// SetOverwriteDuplicatedInlinedFields specifies if inlined struct fields can be overwritten by higher level struct fields with the
|
|
// same bson key. When true and decoding, values will be written to the outermost struct with a matching key, and when
|
|
// encoding, keys will have the value of the top-most matching field. When false, decoding and encoding will error if
|
|
// there are duplicate keys after the struct is inlined. Defaults to true.
|
|
func (t *StructCodecOptions) SetOverwriteDuplicatedInlinedFields(b bool) *StructCodecOptions {
|
|
t.OverwriteDuplicatedInlinedFields = &b
|
|
return t
|
|
}
|
|
|
|
// SetAllowUnexportedFields specifies if unexported fields should be marshaled/unmarshaled. Defaults to false.
|
|
func (t *StructCodecOptions) SetAllowUnexportedFields(b bool) *StructCodecOptions {
|
|
t.AllowUnexportedFields = &b
|
|
return t
|
|
}
|
|
|
|
// MergeStructCodecOptions combines the given *StructCodecOptions into a single *StructCodecOptions in a last one wins fashion.
|
|
func MergeStructCodecOptions(opts ...*StructCodecOptions) *StructCodecOptions {
|
|
s := &StructCodecOptions{
|
|
OverwriteDuplicatedInlinedFields: &defaultOverwriteDuplicatedInlinedFields,
|
|
}
|
|
for _, opt := range opts {
|
|
if opt == nil {
|
|
continue
|
|
}
|
|
|
|
if opt.DecodeZeroStruct != nil {
|
|
s.DecodeZeroStruct = opt.DecodeZeroStruct
|
|
}
|
|
if opt.DecodeDeepZeroInline != nil {
|
|
s.DecodeDeepZeroInline = opt.DecodeDeepZeroInline
|
|
}
|
|
if opt.EncodeOmitDefaultStruct != nil {
|
|
s.EncodeOmitDefaultStruct = opt.EncodeOmitDefaultStruct
|
|
}
|
|
if opt.OverwriteDuplicatedInlinedFields != nil {
|
|
s.OverwriteDuplicatedInlinedFields = opt.OverwriteDuplicatedInlinedFields
|
|
}
|
|
if opt.AllowUnexportedFields != nil {
|
|
s.AllowUnexportedFields = opt.AllowUnexportedFields
|
|
}
|
|
}
|
|
|
|
return s
|
|
}
|