github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/params/struct.go (about)

     1  package params
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/google/uuid"
     7  
     8  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/value"
     9  )
    10  
    11  type (
    12  	structure struct {
    13  		parent Builder
    14  		name   string
    15  		values []value.StructValueField
    16  	}
    17  
    18  	structValue struct {
    19  		parent *structure
    20  		name   string
    21  	}
    22  )
    23  
    24  func (s *structure) AddItems(items ...value.StructValueField) *structure {
    25  	s.values = append(s.values, items...)
    26  
    27  	return s
    28  }
    29  
    30  func (s *structure) Field(v string) *structValue {
    31  	return &structValue{
    32  		parent: s,
    33  		name:   v,
    34  	}
    35  }
    36  
    37  func (s *structure) EndStruct() Builder {
    38  	s.parent.params = append(s.parent.params, &Parameter{
    39  		parent: s.parent,
    40  		name:   s.name,
    41  		value:  value.StructValue(s.values...),
    42  	})
    43  
    44  	return s.parent
    45  }
    46  
    47  func (s *structValue) Text(v string) *structure {
    48  	s.parent.values = append(s.parent.values, value.StructValueField{
    49  		Name: s.name,
    50  		V:    value.TextValue(v),
    51  	})
    52  
    53  	return s.parent
    54  }
    55  
    56  func (s *structValue) Bytes(v []byte) *structure {
    57  	s.parent.values = append(s.parent.values, value.StructValueField{
    58  		Name: s.name,
    59  		V:    value.BytesValue(v),
    60  	})
    61  
    62  	return s.parent
    63  }
    64  
    65  func (s *structValue) Bool(v bool) *structure {
    66  	s.parent.values = append(s.parent.values, value.StructValueField{
    67  		Name: s.name,
    68  		V:    value.BoolValue(v),
    69  	})
    70  
    71  	return s.parent
    72  }
    73  
    74  func (s *structValue) Uint64(v uint64) *structure {
    75  	s.parent.values = append(s.parent.values, value.StructValueField{
    76  		Name: s.name,
    77  		V:    value.Uint64Value(v),
    78  	})
    79  
    80  	return s.parent
    81  }
    82  
    83  func (s *structValue) Int64(v int64) *structure {
    84  	s.parent.values = append(s.parent.values, value.StructValueField{
    85  		Name: s.name,
    86  		V:    value.Int64Value(v),
    87  	})
    88  
    89  	return s.parent
    90  }
    91  
    92  func (s *structValue) Uint32(v uint32) *structure {
    93  	s.parent.values = append(s.parent.values, value.StructValueField{
    94  		Name: s.name,
    95  		V:    value.Uint32Value(v),
    96  	})
    97  
    98  	return s.parent
    99  }
   100  
   101  func (s *structValue) Int32(v int32) *structure {
   102  	s.parent.values = append(s.parent.values, value.StructValueField{
   103  		Name: s.name,
   104  		V:    value.Int32Value(v),
   105  	})
   106  
   107  	return s.parent
   108  }
   109  
   110  func (s *structValue) Uint16(v uint16) *structure {
   111  	s.parent.values = append(s.parent.values, value.StructValueField{
   112  		Name: s.name,
   113  		V:    value.Uint16Value(v),
   114  	})
   115  
   116  	return s.parent
   117  }
   118  
   119  func (s *structValue) Int16(v int16) *structure {
   120  	s.parent.values = append(s.parent.values, value.StructValueField{
   121  		Name: s.name,
   122  		V:    value.Int16Value(v),
   123  	})
   124  
   125  	return s.parent
   126  }
   127  
   128  func (s *structValue) Uint8(v uint8) *structure {
   129  	s.parent.values = append(s.parent.values, value.StructValueField{
   130  		Name: s.name,
   131  		V:    value.Uint8Value(v),
   132  	})
   133  
   134  	return s.parent
   135  }
   136  
   137  func (s *structValue) Int8(v int8) *structure {
   138  	s.parent.values = append(s.parent.values, value.StructValueField{
   139  		Name: s.name,
   140  		V:    value.Int8Value(v),
   141  	})
   142  
   143  	return s.parent
   144  }
   145  
   146  func (s *structValue) Float(v float32) *structure {
   147  	s.parent.values = append(s.parent.values, value.StructValueField{
   148  		Name: s.name,
   149  		V:    value.FloatValue(v),
   150  	})
   151  
   152  	return s.parent
   153  }
   154  
   155  func (s *structValue) Double(v float64) *structure {
   156  	s.parent.values = append(s.parent.values, value.StructValueField{
   157  		Name: s.name,
   158  		V:    value.DoubleValue(v),
   159  	})
   160  
   161  	return s.parent
   162  }
   163  
   164  func (s *structValue) Decimal(v [16]byte, precision, scale uint32) *structure {
   165  	s.parent.values = append(s.parent.values, value.StructValueField{
   166  		Name: s.name,
   167  		V:    value.DecimalValue(v, precision, scale),
   168  	})
   169  
   170  	return s.parent
   171  }
   172  
   173  func (s *structValue) Timestamp(v time.Time) *structure {
   174  	s.parent.values = append(s.parent.values, value.StructValueField{
   175  		Name: s.name,
   176  		V:    value.TimestampValueFromTime(v),
   177  	})
   178  
   179  	return s.parent
   180  }
   181  
   182  func (s *structValue) Date(v time.Time) *structure {
   183  	s.parent.values = append(s.parent.values, value.StructValueField{
   184  		Name: s.name,
   185  		V:    value.DateValueFromTime(v),
   186  	})
   187  
   188  	return s.parent
   189  }
   190  
   191  func (s *structValue) Datetime(v time.Time) *structure {
   192  	s.parent.values = append(s.parent.values, value.StructValueField{
   193  		Name: s.name,
   194  		V:    value.DatetimeValueFromTime(v),
   195  	})
   196  
   197  	return s.parent
   198  }
   199  
   200  func (s *structValue) Interval(v time.Duration) *structure {
   201  	s.parent.values = append(s.parent.values, value.StructValueField{
   202  		Name: s.name,
   203  		V:    value.IntervalValueFromDuration(v),
   204  	})
   205  
   206  	return s.parent
   207  }
   208  
   209  func (s *structValue) JSON(v string) *structure {
   210  	s.parent.values = append(s.parent.values, value.StructValueField{
   211  		Name: s.name,
   212  		V:    value.JSONValue(v),
   213  	})
   214  
   215  	return s.parent
   216  }
   217  
   218  func (s *structValue) JSONDocument(v string) *structure {
   219  	s.parent.values = append(s.parent.values, value.StructValueField{
   220  		Name: s.name,
   221  		V:    value.JSONDocumentValue(v),
   222  	})
   223  
   224  	return s.parent
   225  }
   226  
   227  func (s *structValue) YSON(v []byte) *structure {
   228  	s.parent.values = append(s.parent.values, value.StructValueField{
   229  		Name: s.name,
   230  		V:    value.YSONValue(v),
   231  	})
   232  
   233  	return s.parent
   234  }
   235  
   236  //// UUID has data corruption bug and will be removed in next version.
   237  ////
   238  //// Deprecated: Use Uuid (prefer) or UUIDWithIssue1501Value (for save old behavior) instead.
   239  //// https://github.com/ydb-platform/ydb-go-sdk/issues/1501
   240  //func (s *structValue) UUID(v [16]byte) *structure {
   241  //	s.parent.values = append(s.parent.values, value.StructValueField{
   242  //		Name: s.name,
   243  //		V:    value.UUIDWithIssue1501Value(v),
   244  //	})
   245  //
   246  //	return s.parent
   247  //}
   248  
   249  func (s *structValue) Uuid(v uuid.UUID) *structure { //nolint:revive,stylecheck
   250  	s.parent.values = append(s.parent.values, value.StructValueField{
   251  		Name: s.name,
   252  		V:    value.Uuid(v),
   253  	})
   254  
   255  	return s.parent
   256  }
   257  
   258  func (s *structValue) UUIDWithIssue1501Value(v [16]byte) *structure {
   259  	s.parent.values = append(s.parent.values, value.StructValueField{
   260  		Name: s.name,
   261  		V:    value.UUIDWithIssue1501Value(v),
   262  	})
   263  
   264  	return s.parent
   265  }
   266  
   267  func (s *structValue) TzDatetime(v time.Time) *structure {
   268  	s.parent.values = append(s.parent.values, value.StructValueField{
   269  		Name: s.name,
   270  		V:    value.TzDatetimeValueFromTime(v),
   271  	})
   272  
   273  	return s.parent
   274  }
   275  
   276  func (s *structValue) TzTimestamp(v time.Time) *structure {
   277  	s.parent.values = append(s.parent.values, value.StructValueField{
   278  		Name: s.name,
   279  		V:    value.TzTimestampValueFromTime(v),
   280  	})
   281  
   282  	return s.parent
   283  }
   284  
   285  func (s *structValue) TzDate(v time.Time) *structure {
   286  	s.parent.values = append(s.parent.values, value.StructValueField{
   287  		Name: s.name,
   288  		V:    value.TzDateValueFromTime(v),
   289  	})
   290  
   291  	return s.parent
   292  }