github.com/mdaxf/iac@v0.0.0-20240519030858-58a061660378/vendor_skip/go.mongodb.org/mongo-driver/bson/bsonoptions/struct_codec_options.go (about)

     1  // Copyright (C) MongoDB, Inc. 2017-present.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License"); you may
     4  // not use this file except in compliance with the License. You may obtain
     5  // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
     6  
     7  package bsonoptions
     8  
     9  var defaultOverwriteDuplicatedInlinedFields = true
    10  
    11  // StructCodecOptions represents all possible options for struct encoding and decoding.
    12  //
    13  // Deprecated: Use the bson.Encoder and bson.Decoder configuration methods to set the desired BSON marshal
    14  // and unmarshal behavior instead.
    15  type StructCodecOptions struct {
    16  	DecodeZeroStruct                 *bool // Specifies if structs should be zeroed before decoding into them. Defaults to false.
    17  	DecodeDeepZeroInline             *bool // Specifies if structs should be recursively zeroed when a inline value is decoded. Defaults to false.
    18  	EncodeOmitDefaultStruct          *bool // Specifies if default structs should be considered empty by omitempty. Defaults to false.
    19  	AllowUnexportedFields            *bool // Specifies if unexported fields should be marshaled/unmarshaled. Defaults to false.
    20  	OverwriteDuplicatedInlinedFields *bool // Specifies if fields in inlined structs can be overwritten by higher level struct fields with the same key. Defaults to true.
    21  }
    22  
    23  // StructCodec creates a new *StructCodecOptions
    24  //
    25  // Deprecated: Use the bson.Encoder and bson.Decoder configuration methods to set the desired BSON marshal
    26  // and unmarshal behavior instead.
    27  func StructCodec() *StructCodecOptions {
    28  	return &StructCodecOptions{}
    29  }
    30  
    31  // SetDecodeZeroStruct specifies if structs should be zeroed before decoding into them. Defaults to false.
    32  //
    33  // Deprecated: Use [go.mongodb.org/mongo-driver/bson.Decoder.ZeroStructs] instead.
    34  func (t *StructCodecOptions) SetDecodeZeroStruct(b bool) *StructCodecOptions {
    35  	t.DecodeZeroStruct = &b
    36  	return t
    37  }
    38  
    39  // SetDecodeDeepZeroInline specifies if structs should be zeroed before decoding into them. Defaults to false.
    40  //
    41  // Deprecated: DecodeDeepZeroInline will not be supported in Go Driver 2.0.
    42  func (t *StructCodecOptions) SetDecodeDeepZeroInline(b bool) *StructCodecOptions {
    43  	t.DecodeDeepZeroInline = &b
    44  	return t
    45  }
    46  
    47  // SetEncodeOmitDefaultStruct specifies if default structs should be considered empty by omitempty. A default struct has all
    48  // its values set to their default value. Defaults to false.
    49  //
    50  // Deprecated: Use [go.mongodb.org/mongo-driver/bson.Encoder.OmitZeroStruct] instead.
    51  func (t *StructCodecOptions) SetEncodeOmitDefaultStruct(b bool) *StructCodecOptions {
    52  	t.EncodeOmitDefaultStruct = &b
    53  	return t
    54  }
    55  
    56  // SetOverwriteDuplicatedInlinedFields specifies if inlined struct fields can be overwritten by higher level struct fields with the
    57  // same bson key. When true and decoding, values will be written to the outermost struct with a matching key, and when
    58  // encoding, keys will have the value of the top-most matching field. When false, decoding and encoding will error if
    59  // there are duplicate keys after the struct is inlined. Defaults to true.
    60  //
    61  // Deprecated: Use [go.mongodb.org/mongo-driver/bson.Encoder.ErrorOnInlineDuplicates] instead.
    62  func (t *StructCodecOptions) SetOverwriteDuplicatedInlinedFields(b bool) *StructCodecOptions {
    63  	t.OverwriteDuplicatedInlinedFields = &b
    64  	return t
    65  }
    66  
    67  // SetAllowUnexportedFields specifies if unexported fields should be marshaled/unmarshaled. Defaults to false.
    68  //
    69  // Deprecated: AllowUnexportedFields does not work on recent versions of Go and will not be
    70  // supported in Go Driver 2.0.
    71  func (t *StructCodecOptions) SetAllowUnexportedFields(b bool) *StructCodecOptions {
    72  	t.AllowUnexportedFields = &b
    73  	return t
    74  }
    75  
    76  // MergeStructCodecOptions combines the given *StructCodecOptions into a single *StructCodecOptions in a last one wins fashion.
    77  //
    78  // Deprecated: Merging options structs will not be supported in Go Driver 2.0. Users should create a
    79  // single options struct instead.
    80  func MergeStructCodecOptions(opts ...*StructCodecOptions) *StructCodecOptions {
    81  	s := &StructCodecOptions{
    82  		OverwriteDuplicatedInlinedFields: &defaultOverwriteDuplicatedInlinedFields,
    83  	}
    84  	for _, opt := range opts {
    85  		if opt == nil {
    86  			continue
    87  		}
    88  
    89  		if opt.DecodeZeroStruct != nil {
    90  			s.DecodeZeroStruct = opt.DecodeZeroStruct
    91  		}
    92  		if opt.DecodeDeepZeroInline != nil {
    93  			s.DecodeDeepZeroInline = opt.DecodeDeepZeroInline
    94  		}
    95  		if opt.EncodeOmitDefaultStruct != nil {
    96  			s.EncodeOmitDefaultStruct = opt.EncodeOmitDefaultStruct
    97  		}
    98  		if opt.OverwriteDuplicatedInlinedFields != nil {
    99  			s.OverwriteDuplicatedInlinedFields = opt.OverwriteDuplicatedInlinedFields
   100  		}
   101  		if opt.AllowUnexportedFields != nil {
   102  			s.AllowUnexportedFields = opt.AllowUnexportedFields
   103  		}
   104  	}
   105  
   106  	return s
   107  }