mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-08-28 18:41:33 +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
68 lines
2.9 KiB
Go
Vendored
68 lines
2.9 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
|
|
|
|
// MapCodecOptions represents all possible options for map encoding and decoding.
|
|
type MapCodecOptions struct {
|
|
DecodeZerosMap *bool // Specifies if the map should be zeroed before decoding into it. Defaults to false.
|
|
EncodeNilAsEmpty *bool // Specifies if a nil map should encode as an empty document instead of null. Defaults to false.
|
|
// Specifies how keys should be handled. If false, the behavior matches encoding/json, where the encoding key type must
|
|
// either be a string, an integer type, or implement bsoncodec.KeyMarshaler and the decoding key type must either be a
|
|
// string, an integer type, or implement bsoncodec.KeyUnmarshaler. If true, keys are encoded with fmt.Sprint() and the
|
|
// encoding key type must be a string, an integer type, or a float. If true, the use of Stringer will override
|
|
// TextMarshaler/TextUnmarshaler. Defaults to false.
|
|
EncodeKeysWithStringer *bool
|
|
}
|
|
|
|
// MapCodec creates a new *MapCodecOptions
|
|
func MapCodec() *MapCodecOptions {
|
|
return &MapCodecOptions{}
|
|
}
|
|
|
|
// SetDecodeZerosMap specifies if the map should be zeroed before decoding into it. Defaults to false.
|
|
func (t *MapCodecOptions) SetDecodeZerosMap(b bool) *MapCodecOptions {
|
|
t.DecodeZerosMap = &b
|
|
return t
|
|
}
|
|
|
|
// SetEncodeNilAsEmpty specifies if a nil map should encode as an empty document instead of null. Defaults to false.
|
|
func (t *MapCodecOptions) SetEncodeNilAsEmpty(b bool) *MapCodecOptions {
|
|
t.EncodeNilAsEmpty = &b
|
|
return t
|
|
}
|
|
|
|
// SetEncodeKeysWithStringer specifies how keys should be handled. If false, the behavior matches encoding/json, where the
|
|
// encoding key type must either be a string, an integer type, or implement bsoncodec.KeyMarshaler and the decoding key
|
|
// type must either be a string, an integer type, or implement bsoncodec.KeyUnmarshaler. If true, keys are encoded with
|
|
// fmt.Sprint() and the encoding key type must be a string, an integer type, or a float. If true, the use of Stringer
|
|
// will override TextMarshaler/TextUnmarshaler. Defaults to false.
|
|
func (t *MapCodecOptions) SetEncodeKeysWithStringer(b bool) *MapCodecOptions {
|
|
t.EncodeKeysWithStringer = &b
|
|
return t
|
|
}
|
|
|
|
// MergeMapCodecOptions combines the given *MapCodecOptions into a single *MapCodecOptions in a last one wins fashion.
|
|
func MergeMapCodecOptions(opts ...*MapCodecOptions) *MapCodecOptions {
|
|
s := MapCodec()
|
|
for _, opt := range opts {
|
|
if opt == nil {
|
|
continue
|
|
}
|
|
if opt.DecodeZerosMap != nil {
|
|
s.DecodeZerosMap = opt.DecodeZerosMap
|
|
}
|
|
if opt.EncodeNilAsEmpty != nil {
|
|
s.EncodeNilAsEmpty = opt.EncodeNilAsEmpty
|
|
}
|
|
if opt.EncodeKeysWithStringer != nil {
|
|
s.EncodeKeysWithStringer = opt.EncodeKeysWithStringer
|
|
}
|
|
}
|
|
|
|
return s
|
|
}
|