go.uber.org/yarpc@v1.72.1/serialize/internal/internal.go (about)

     1  // Code generated by thriftrw v1.29.2. DO NOT EDIT.
     2  // @generated
     3  
     4  // Copyright (c) 2022 Uber Technologies, Inc.
     5  //
     6  // Permission is hereby granted, free of charge, to any person obtaining a copy
     7  // of this software and associated documentation files (the "Software"), to deal
     8  // in the Software without restriction, including without limitation the rights
     9  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    10  // copies of the Software, and to permit persons to whom the Software is
    11  // furnished to do so, subject to the following conditions:
    12  //
    13  // The above copyright notice and this permission notice shall be included in
    14  // all copies or substantial portions of the Software.
    15  //
    16  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    17  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    18  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    19  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    20  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    21  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    22  // THE SOFTWARE.
    23  
    24  package internal
    25  
    26  import (
    27  	bytes "bytes"
    28  	base64 "encoding/base64"
    29  	errors "errors"
    30  	fmt "fmt"
    31  	multierr "go.uber.org/multierr"
    32  	stream "go.uber.org/thriftrw/protocol/stream"
    33  	thriftreflect "go.uber.org/thriftrw/thriftreflect"
    34  	wire "go.uber.org/thriftrw/wire"
    35  	zapcore "go.uber.org/zap/zapcore"
    36  	strings "strings"
    37  )
    38  
    39  type RPC struct {
    40  	SpanContext     []byte            `json:"spanContext,required"`
    41  	CallerName      string            `json:"callerName,required"`
    42  	ServiceName     string            `json:"serviceName,required"`
    43  	Encoding        string            `json:"encoding,required"`
    44  	Procedure       string            `json:"procedure,required"`
    45  	Headers         map[string]string `json:"headers,omitempty"`
    46  	ShardKey        *string           `json:"shardKey,omitempty"`
    47  	RoutingKey      *string           `json:"routingKey,omitempty"`
    48  	RoutingDelegate *string           `json:"routingDelegate,omitempty"`
    49  	Body            []byte            `json:"body,omitempty"`
    50  }
    51  
    52  type _Map_String_String_MapItemList map[string]string
    53  
    54  func (m _Map_String_String_MapItemList) ForEach(f func(wire.MapItem) error) error {
    55  	for k, v := range m {
    56  		kw, err := wire.NewValueString(k), error(nil)
    57  		if err != nil {
    58  			return err
    59  		}
    60  
    61  		vw, err := wire.NewValueString(v), error(nil)
    62  		if err != nil {
    63  			return err
    64  		}
    65  		err = f(wire.MapItem{Key: kw, Value: vw})
    66  		if err != nil {
    67  			return err
    68  		}
    69  	}
    70  	return nil
    71  }
    72  
    73  func (m _Map_String_String_MapItemList) Size() int {
    74  	return len(m)
    75  }
    76  
    77  func (_Map_String_String_MapItemList) KeyType() wire.Type {
    78  	return wire.TBinary
    79  }
    80  
    81  func (_Map_String_String_MapItemList) ValueType() wire.Type {
    82  	return wire.TBinary
    83  }
    84  
    85  func (_Map_String_String_MapItemList) Close() {}
    86  
    87  // ToWire translates a RPC struct into a Thrift-level intermediate
    88  // representation. This intermediate representation may be serialized
    89  // into bytes using a ThriftRW protocol implementation.
    90  //
    91  // An error is returned if the struct or any of its fields failed to
    92  // validate.
    93  //
    94  //   x, err := v.ToWire()
    95  //   if err != nil {
    96  //     return err
    97  //   }
    98  //
    99  //   if err := binaryProtocol.Encode(x, writer); err != nil {
   100  //     return err
   101  //   }
   102  func (v *RPC) ToWire() (wire.Value, error) {
   103  	var (
   104  		fields [10]wire.Field
   105  		i      int = 0
   106  		w      wire.Value
   107  		err    error
   108  	)
   109  
   110  	if v.SpanContext == nil {
   111  		return w, errors.New("field SpanContext of RPC is required")
   112  	}
   113  	w, err = wire.NewValueBinary(v.SpanContext), error(nil)
   114  	if err != nil {
   115  		return w, err
   116  	}
   117  	fields[i] = wire.Field{ID: 1, Value: w}
   118  	i++
   119  
   120  	w, err = wire.NewValueString(v.CallerName), error(nil)
   121  	if err != nil {
   122  		return w, err
   123  	}
   124  	fields[i] = wire.Field{ID: 2, Value: w}
   125  	i++
   126  
   127  	w, err = wire.NewValueString(v.ServiceName), error(nil)
   128  	if err != nil {
   129  		return w, err
   130  	}
   131  	fields[i] = wire.Field{ID: 3, Value: w}
   132  	i++
   133  
   134  	w, err = wire.NewValueString(v.Encoding), error(nil)
   135  	if err != nil {
   136  		return w, err
   137  	}
   138  	fields[i] = wire.Field{ID: 4, Value: w}
   139  	i++
   140  
   141  	w, err = wire.NewValueString(v.Procedure), error(nil)
   142  	if err != nil {
   143  		return w, err
   144  	}
   145  	fields[i] = wire.Field{ID: 5, Value: w}
   146  	i++
   147  	if v.Headers != nil {
   148  		w, err = wire.NewValueMap(_Map_String_String_MapItemList(v.Headers)), error(nil)
   149  		if err != nil {
   150  			return w, err
   151  		}
   152  		fields[i] = wire.Field{ID: 6, Value: w}
   153  		i++
   154  	}
   155  	if v.ShardKey != nil {
   156  		w, err = wire.NewValueString(*(v.ShardKey)), error(nil)
   157  		if err != nil {
   158  			return w, err
   159  		}
   160  		fields[i] = wire.Field{ID: 7, Value: w}
   161  		i++
   162  	}
   163  	if v.RoutingKey != nil {
   164  		w, err = wire.NewValueString(*(v.RoutingKey)), error(nil)
   165  		if err != nil {
   166  			return w, err
   167  		}
   168  		fields[i] = wire.Field{ID: 8, Value: w}
   169  		i++
   170  	}
   171  	if v.RoutingDelegate != nil {
   172  		w, err = wire.NewValueString(*(v.RoutingDelegate)), error(nil)
   173  		if err != nil {
   174  			return w, err
   175  		}
   176  		fields[i] = wire.Field{ID: 9, Value: w}
   177  		i++
   178  	}
   179  	if v.Body != nil {
   180  		w, err = wire.NewValueBinary(v.Body), error(nil)
   181  		if err != nil {
   182  			return w, err
   183  		}
   184  		fields[i] = wire.Field{ID: 10, Value: w}
   185  		i++
   186  	}
   187  
   188  	return wire.NewValueStruct(wire.Struct{Fields: fields[:i]}), nil
   189  }
   190  
   191  func _Map_String_String_Read(m wire.MapItemList) (map[string]string, error) {
   192  	if m.KeyType() != wire.TBinary {
   193  		return nil, nil
   194  	}
   195  
   196  	if m.ValueType() != wire.TBinary {
   197  		return nil, nil
   198  	}
   199  
   200  	o := make(map[string]string, m.Size())
   201  	err := m.ForEach(func(x wire.MapItem) error {
   202  		k, err := x.Key.GetString(), error(nil)
   203  		if err != nil {
   204  			return err
   205  		}
   206  
   207  		v, err := x.Value.GetString(), error(nil)
   208  		if err != nil {
   209  			return err
   210  		}
   211  
   212  		o[k] = v
   213  		return nil
   214  	})
   215  	m.Close()
   216  	return o, err
   217  }
   218  
   219  // FromWire deserializes a RPC struct from its Thrift-level
   220  // representation. The Thrift-level representation may be obtained
   221  // from a ThriftRW protocol implementation.
   222  //
   223  // An error is returned if we were unable to build a RPC struct
   224  // from the provided intermediate representation.
   225  //
   226  //   x, err := binaryProtocol.Decode(reader, wire.TStruct)
   227  //   if err != nil {
   228  //     return nil, err
   229  //   }
   230  //
   231  //   var v RPC
   232  //   if err := v.FromWire(x); err != nil {
   233  //     return nil, err
   234  //   }
   235  //   return &v, nil
   236  func (v *RPC) FromWire(w wire.Value) error {
   237  	var err error
   238  
   239  	spanContextIsSet := false
   240  	callerNameIsSet := false
   241  	serviceNameIsSet := false
   242  	encodingIsSet := false
   243  	procedureIsSet := false
   244  
   245  	for _, field := range w.GetStruct().Fields {
   246  		switch field.ID {
   247  		case 1:
   248  			if field.Value.Type() == wire.TBinary {
   249  				v.SpanContext, err = field.Value.GetBinary(), error(nil)
   250  				if err != nil {
   251  					return err
   252  				}
   253  				spanContextIsSet = true
   254  			}
   255  		case 2:
   256  			if field.Value.Type() == wire.TBinary {
   257  				v.CallerName, err = field.Value.GetString(), error(nil)
   258  				if err != nil {
   259  					return err
   260  				}
   261  				callerNameIsSet = true
   262  			}
   263  		case 3:
   264  			if field.Value.Type() == wire.TBinary {
   265  				v.ServiceName, err = field.Value.GetString(), error(nil)
   266  				if err != nil {
   267  					return err
   268  				}
   269  				serviceNameIsSet = true
   270  			}
   271  		case 4:
   272  			if field.Value.Type() == wire.TBinary {
   273  				v.Encoding, err = field.Value.GetString(), error(nil)
   274  				if err != nil {
   275  					return err
   276  				}
   277  				encodingIsSet = true
   278  			}
   279  		case 5:
   280  			if field.Value.Type() == wire.TBinary {
   281  				v.Procedure, err = field.Value.GetString(), error(nil)
   282  				if err != nil {
   283  					return err
   284  				}
   285  				procedureIsSet = true
   286  			}
   287  		case 6:
   288  			if field.Value.Type() == wire.TMap {
   289  				v.Headers, err = _Map_String_String_Read(field.Value.GetMap())
   290  				if err != nil {
   291  					return err
   292  				}
   293  
   294  			}
   295  		case 7:
   296  			if field.Value.Type() == wire.TBinary {
   297  				var x string
   298  				x, err = field.Value.GetString(), error(nil)
   299  				v.ShardKey = &x
   300  				if err != nil {
   301  					return err
   302  				}
   303  
   304  			}
   305  		case 8:
   306  			if field.Value.Type() == wire.TBinary {
   307  				var x string
   308  				x, err = field.Value.GetString(), error(nil)
   309  				v.RoutingKey = &x
   310  				if err != nil {
   311  					return err
   312  				}
   313  
   314  			}
   315  		case 9:
   316  			if field.Value.Type() == wire.TBinary {
   317  				var x string
   318  				x, err = field.Value.GetString(), error(nil)
   319  				v.RoutingDelegate = &x
   320  				if err != nil {
   321  					return err
   322  				}
   323  
   324  			}
   325  		case 10:
   326  			if field.Value.Type() == wire.TBinary {
   327  				v.Body, err = field.Value.GetBinary(), error(nil)
   328  				if err != nil {
   329  					return err
   330  				}
   331  
   332  			}
   333  		}
   334  	}
   335  
   336  	if !spanContextIsSet {
   337  		return errors.New("field SpanContext of RPC is required")
   338  	}
   339  
   340  	if !callerNameIsSet {
   341  		return errors.New("field CallerName of RPC is required")
   342  	}
   343  
   344  	if !serviceNameIsSet {
   345  		return errors.New("field ServiceName of RPC is required")
   346  	}
   347  
   348  	if !encodingIsSet {
   349  		return errors.New("field Encoding of RPC is required")
   350  	}
   351  
   352  	if !procedureIsSet {
   353  		return errors.New("field Procedure of RPC is required")
   354  	}
   355  
   356  	return nil
   357  }
   358  
   359  func _Map_String_String_Encode(val map[string]string, sw stream.Writer) error {
   360  
   361  	mh := stream.MapHeader{
   362  		KeyType:   wire.TBinary,
   363  		ValueType: wire.TBinary,
   364  		Length:    len(val),
   365  	}
   366  	if err := sw.WriteMapBegin(mh); err != nil {
   367  		return err
   368  	}
   369  
   370  	for k, v := range val {
   371  		if err := sw.WriteString(k); err != nil {
   372  			return err
   373  		}
   374  		if err := sw.WriteString(v); err != nil {
   375  			return err
   376  		}
   377  	}
   378  
   379  	return sw.WriteMapEnd()
   380  }
   381  
   382  // Encode serializes a RPC struct directly into bytes, without going
   383  // through an intermediary type.
   384  //
   385  // An error is returned if a RPC struct could not be encoded.
   386  func (v *RPC) Encode(sw stream.Writer) error {
   387  	if err := sw.WriteStructBegin(); err != nil {
   388  		return err
   389  	}
   390  
   391  	if v.SpanContext == nil {
   392  		return errors.New("field SpanContext of RPC is required")
   393  	}
   394  	if err := sw.WriteFieldBegin(stream.FieldHeader{ID: 1, Type: wire.TBinary}); err != nil {
   395  		return err
   396  	}
   397  	if err := sw.WriteBinary(v.SpanContext); err != nil {
   398  		return err
   399  	}
   400  	if err := sw.WriteFieldEnd(); err != nil {
   401  		return err
   402  	}
   403  
   404  	if err := sw.WriteFieldBegin(stream.FieldHeader{ID: 2, Type: wire.TBinary}); err != nil {
   405  		return err
   406  	}
   407  	if err := sw.WriteString(v.CallerName); err != nil {
   408  		return err
   409  	}
   410  	if err := sw.WriteFieldEnd(); err != nil {
   411  		return err
   412  	}
   413  
   414  	if err := sw.WriteFieldBegin(stream.FieldHeader{ID: 3, Type: wire.TBinary}); err != nil {
   415  		return err
   416  	}
   417  	if err := sw.WriteString(v.ServiceName); err != nil {
   418  		return err
   419  	}
   420  	if err := sw.WriteFieldEnd(); err != nil {
   421  		return err
   422  	}
   423  
   424  	if err := sw.WriteFieldBegin(stream.FieldHeader{ID: 4, Type: wire.TBinary}); err != nil {
   425  		return err
   426  	}
   427  	if err := sw.WriteString(v.Encoding); err != nil {
   428  		return err
   429  	}
   430  	if err := sw.WriteFieldEnd(); err != nil {
   431  		return err
   432  	}
   433  
   434  	if err := sw.WriteFieldBegin(stream.FieldHeader{ID: 5, Type: wire.TBinary}); err != nil {
   435  		return err
   436  	}
   437  	if err := sw.WriteString(v.Procedure); err != nil {
   438  		return err
   439  	}
   440  	if err := sw.WriteFieldEnd(); err != nil {
   441  		return err
   442  	}
   443  
   444  	if v.Headers != nil {
   445  		if err := sw.WriteFieldBegin(stream.FieldHeader{ID: 6, Type: wire.TMap}); err != nil {
   446  			return err
   447  		}
   448  		if err := _Map_String_String_Encode(v.Headers, sw); err != nil {
   449  			return err
   450  		}
   451  		if err := sw.WriteFieldEnd(); err != nil {
   452  			return err
   453  		}
   454  	}
   455  
   456  	if v.ShardKey != nil {
   457  		if err := sw.WriteFieldBegin(stream.FieldHeader{ID: 7, Type: wire.TBinary}); err != nil {
   458  			return err
   459  		}
   460  		if err := sw.WriteString(*(v.ShardKey)); err != nil {
   461  			return err
   462  		}
   463  		if err := sw.WriteFieldEnd(); err != nil {
   464  			return err
   465  		}
   466  	}
   467  
   468  	if v.RoutingKey != nil {
   469  		if err := sw.WriteFieldBegin(stream.FieldHeader{ID: 8, Type: wire.TBinary}); err != nil {
   470  			return err
   471  		}
   472  		if err := sw.WriteString(*(v.RoutingKey)); err != nil {
   473  			return err
   474  		}
   475  		if err := sw.WriteFieldEnd(); err != nil {
   476  			return err
   477  		}
   478  	}
   479  
   480  	if v.RoutingDelegate != nil {
   481  		if err := sw.WriteFieldBegin(stream.FieldHeader{ID: 9, Type: wire.TBinary}); err != nil {
   482  			return err
   483  		}
   484  		if err := sw.WriteString(*(v.RoutingDelegate)); err != nil {
   485  			return err
   486  		}
   487  		if err := sw.WriteFieldEnd(); err != nil {
   488  			return err
   489  		}
   490  	}
   491  
   492  	if v.Body != nil {
   493  		if err := sw.WriteFieldBegin(stream.FieldHeader{ID: 10, Type: wire.TBinary}); err != nil {
   494  			return err
   495  		}
   496  		if err := sw.WriteBinary(v.Body); err != nil {
   497  			return err
   498  		}
   499  		if err := sw.WriteFieldEnd(); err != nil {
   500  			return err
   501  		}
   502  	}
   503  
   504  	return sw.WriteStructEnd()
   505  }
   506  
   507  func _Map_String_String_Decode(sr stream.Reader) (map[string]string, error) {
   508  	mh, err := sr.ReadMapBegin()
   509  	if err != nil {
   510  		return nil, err
   511  	}
   512  
   513  	if mh.KeyType != wire.TBinary || mh.ValueType != wire.TBinary {
   514  		for i := 0; i < mh.Length; i++ {
   515  			if err := sr.Skip(mh.KeyType); err != nil {
   516  				return nil, err
   517  			}
   518  
   519  			if err := sr.Skip(mh.ValueType); err != nil {
   520  				return nil, err
   521  			}
   522  		}
   523  		return nil, sr.ReadMapEnd()
   524  	}
   525  
   526  	o := make(map[string]string, mh.Length)
   527  	for i := 0; i < mh.Length; i++ {
   528  		k, err := sr.ReadString()
   529  		if err != nil {
   530  			return nil, err
   531  		}
   532  
   533  		v, err := sr.ReadString()
   534  		if err != nil {
   535  			return nil, err
   536  		}
   537  
   538  		o[k] = v
   539  	}
   540  
   541  	if err = sr.ReadMapEnd(); err != nil {
   542  		return nil, err
   543  	}
   544  	return o, err
   545  }
   546  
   547  // Decode deserializes a RPC struct directly from its Thrift-level
   548  // representation, without going through an intemediary type.
   549  //
   550  // An error is returned if a RPC struct could not be generated from the wire
   551  // representation.
   552  func (v *RPC) Decode(sr stream.Reader) error {
   553  
   554  	spanContextIsSet := false
   555  	callerNameIsSet := false
   556  	serviceNameIsSet := false
   557  	encodingIsSet := false
   558  	procedureIsSet := false
   559  
   560  	if err := sr.ReadStructBegin(); err != nil {
   561  		return err
   562  	}
   563  
   564  	fh, ok, err := sr.ReadFieldBegin()
   565  	if err != nil {
   566  		return err
   567  	}
   568  
   569  	for ok {
   570  		switch {
   571  		case fh.ID == 1 && fh.Type == wire.TBinary:
   572  			v.SpanContext, err = sr.ReadBinary()
   573  			if err != nil {
   574  				return err
   575  			}
   576  			spanContextIsSet = true
   577  		case fh.ID == 2 && fh.Type == wire.TBinary:
   578  			v.CallerName, err = sr.ReadString()
   579  			if err != nil {
   580  				return err
   581  			}
   582  			callerNameIsSet = true
   583  		case fh.ID == 3 && fh.Type == wire.TBinary:
   584  			v.ServiceName, err = sr.ReadString()
   585  			if err != nil {
   586  				return err
   587  			}
   588  			serviceNameIsSet = true
   589  		case fh.ID == 4 && fh.Type == wire.TBinary:
   590  			v.Encoding, err = sr.ReadString()
   591  			if err != nil {
   592  				return err
   593  			}
   594  			encodingIsSet = true
   595  		case fh.ID == 5 && fh.Type == wire.TBinary:
   596  			v.Procedure, err = sr.ReadString()
   597  			if err != nil {
   598  				return err
   599  			}
   600  			procedureIsSet = true
   601  		case fh.ID == 6 && fh.Type == wire.TMap:
   602  			v.Headers, err = _Map_String_String_Decode(sr)
   603  			if err != nil {
   604  				return err
   605  			}
   606  
   607  		case fh.ID == 7 && fh.Type == wire.TBinary:
   608  			var x string
   609  			x, err = sr.ReadString()
   610  			v.ShardKey = &x
   611  			if err != nil {
   612  				return err
   613  			}
   614  
   615  		case fh.ID == 8 && fh.Type == wire.TBinary:
   616  			var x string
   617  			x, err = sr.ReadString()
   618  			v.RoutingKey = &x
   619  			if err != nil {
   620  				return err
   621  			}
   622  
   623  		case fh.ID == 9 && fh.Type == wire.TBinary:
   624  			var x string
   625  			x, err = sr.ReadString()
   626  			v.RoutingDelegate = &x
   627  			if err != nil {
   628  				return err
   629  			}
   630  
   631  		case fh.ID == 10 && fh.Type == wire.TBinary:
   632  			v.Body, err = sr.ReadBinary()
   633  			if err != nil {
   634  				return err
   635  			}
   636  
   637  		default:
   638  			if err := sr.Skip(fh.Type); err != nil {
   639  				return err
   640  			}
   641  		}
   642  
   643  		if err := sr.ReadFieldEnd(); err != nil {
   644  			return err
   645  		}
   646  
   647  		if fh, ok, err = sr.ReadFieldBegin(); err != nil {
   648  			return err
   649  		}
   650  	}
   651  
   652  	if err := sr.ReadStructEnd(); err != nil {
   653  		return err
   654  	}
   655  
   656  	if !spanContextIsSet {
   657  		return errors.New("field SpanContext of RPC is required")
   658  	}
   659  
   660  	if !callerNameIsSet {
   661  		return errors.New("field CallerName of RPC is required")
   662  	}
   663  
   664  	if !serviceNameIsSet {
   665  		return errors.New("field ServiceName of RPC is required")
   666  	}
   667  
   668  	if !encodingIsSet {
   669  		return errors.New("field Encoding of RPC is required")
   670  	}
   671  
   672  	if !procedureIsSet {
   673  		return errors.New("field Procedure of RPC is required")
   674  	}
   675  
   676  	return nil
   677  }
   678  
   679  // String returns a readable string representation of a RPC
   680  // struct.
   681  func (v *RPC) String() string {
   682  	if v == nil {
   683  		return "<nil>"
   684  	}
   685  
   686  	var fields [10]string
   687  	i := 0
   688  	fields[i] = fmt.Sprintf("SpanContext: %v", v.SpanContext)
   689  	i++
   690  	fields[i] = fmt.Sprintf("CallerName: %v", v.CallerName)
   691  	i++
   692  	fields[i] = fmt.Sprintf("ServiceName: %v", v.ServiceName)
   693  	i++
   694  	fields[i] = fmt.Sprintf("Encoding: %v", v.Encoding)
   695  	i++
   696  	fields[i] = fmt.Sprintf("Procedure: %v", v.Procedure)
   697  	i++
   698  	if v.Headers != nil {
   699  		fields[i] = fmt.Sprintf("Headers: %v", v.Headers)
   700  		i++
   701  	}
   702  	if v.ShardKey != nil {
   703  		fields[i] = fmt.Sprintf("ShardKey: %v", *(v.ShardKey))
   704  		i++
   705  	}
   706  	if v.RoutingKey != nil {
   707  		fields[i] = fmt.Sprintf("RoutingKey: %v", *(v.RoutingKey))
   708  		i++
   709  	}
   710  	if v.RoutingDelegate != nil {
   711  		fields[i] = fmt.Sprintf("RoutingDelegate: %v", *(v.RoutingDelegate))
   712  		i++
   713  	}
   714  	if v.Body != nil {
   715  		fields[i] = fmt.Sprintf("Body: %v", v.Body)
   716  		i++
   717  	}
   718  
   719  	return fmt.Sprintf("RPC{%v}", strings.Join(fields[:i], ", "))
   720  }
   721  
   722  func _Map_String_String_Equals(lhs, rhs map[string]string) bool {
   723  	if len(lhs) != len(rhs) {
   724  		return false
   725  	}
   726  
   727  	for lk, lv := range lhs {
   728  		rv, ok := rhs[lk]
   729  		if !ok {
   730  			return false
   731  		}
   732  		if !(lv == rv) {
   733  			return false
   734  		}
   735  	}
   736  	return true
   737  }
   738  
   739  func _String_EqualsPtr(lhs, rhs *string) bool {
   740  	if lhs != nil && rhs != nil {
   741  
   742  		x := *lhs
   743  		y := *rhs
   744  		return (x == y)
   745  	}
   746  	return lhs == nil && rhs == nil
   747  }
   748  
   749  // Equals returns true if all the fields of this RPC match the
   750  // provided RPC.
   751  //
   752  // This function performs a deep comparison.
   753  func (v *RPC) Equals(rhs *RPC) bool {
   754  	if v == nil {
   755  		return rhs == nil
   756  	} else if rhs == nil {
   757  		return false
   758  	}
   759  	if !bytes.Equal(v.SpanContext, rhs.SpanContext) {
   760  		return false
   761  	}
   762  	if !(v.CallerName == rhs.CallerName) {
   763  		return false
   764  	}
   765  	if !(v.ServiceName == rhs.ServiceName) {
   766  		return false
   767  	}
   768  	if !(v.Encoding == rhs.Encoding) {
   769  		return false
   770  	}
   771  	if !(v.Procedure == rhs.Procedure) {
   772  		return false
   773  	}
   774  	if !((v.Headers == nil && rhs.Headers == nil) || (v.Headers != nil && rhs.Headers != nil && _Map_String_String_Equals(v.Headers, rhs.Headers))) {
   775  		return false
   776  	}
   777  	if !_String_EqualsPtr(v.ShardKey, rhs.ShardKey) {
   778  		return false
   779  	}
   780  	if !_String_EqualsPtr(v.RoutingKey, rhs.RoutingKey) {
   781  		return false
   782  	}
   783  	if !_String_EqualsPtr(v.RoutingDelegate, rhs.RoutingDelegate) {
   784  		return false
   785  	}
   786  	if !((v.Body == nil && rhs.Body == nil) || (v.Body != nil && rhs.Body != nil && bytes.Equal(v.Body, rhs.Body))) {
   787  		return false
   788  	}
   789  
   790  	return true
   791  }
   792  
   793  type _Map_String_String_Zapper map[string]string
   794  
   795  // MarshalLogObject implements zapcore.ObjectMarshaler, enabling
   796  // fast logging of _Map_String_String_Zapper.
   797  func (m _Map_String_String_Zapper) MarshalLogObject(enc zapcore.ObjectEncoder) (err error) {
   798  	for k, v := range m {
   799  		enc.AddString((string)(k), v)
   800  	}
   801  	return err
   802  }
   803  
   804  // MarshalLogObject implements zapcore.ObjectMarshaler, enabling
   805  // fast logging of RPC.
   806  func (v *RPC) MarshalLogObject(enc zapcore.ObjectEncoder) (err error) {
   807  	if v == nil {
   808  		return nil
   809  	}
   810  	enc.AddString("spanContext", base64.StdEncoding.EncodeToString(v.SpanContext))
   811  	enc.AddString("callerName", v.CallerName)
   812  	enc.AddString("serviceName", v.ServiceName)
   813  	enc.AddString("encoding", v.Encoding)
   814  	enc.AddString("procedure", v.Procedure)
   815  	if v.Headers != nil {
   816  		err = multierr.Append(err, enc.AddObject("headers", (_Map_String_String_Zapper)(v.Headers)))
   817  	}
   818  	if v.ShardKey != nil {
   819  		enc.AddString("shardKey", *v.ShardKey)
   820  	}
   821  	if v.RoutingKey != nil {
   822  		enc.AddString("routingKey", *v.RoutingKey)
   823  	}
   824  	if v.RoutingDelegate != nil {
   825  		enc.AddString("routingDelegate", *v.RoutingDelegate)
   826  	}
   827  	if v.Body != nil {
   828  		enc.AddString("body", base64.StdEncoding.EncodeToString(v.Body))
   829  	}
   830  	return err
   831  }
   832  
   833  // GetSpanContext returns the value of SpanContext if it is set or its
   834  // zero value if it is unset.
   835  func (v *RPC) GetSpanContext() (o []byte) {
   836  	if v != nil {
   837  		o = v.SpanContext
   838  	}
   839  	return
   840  }
   841  
   842  // IsSetSpanContext returns true if SpanContext is not nil.
   843  func (v *RPC) IsSetSpanContext() bool {
   844  	return v != nil && v.SpanContext != nil
   845  }
   846  
   847  // GetCallerName returns the value of CallerName if it is set or its
   848  // zero value if it is unset.
   849  func (v *RPC) GetCallerName() (o string) {
   850  	if v != nil {
   851  		o = v.CallerName
   852  	}
   853  	return
   854  }
   855  
   856  // GetServiceName returns the value of ServiceName if it is set or its
   857  // zero value if it is unset.
   858  func (v *RPC) GetServiceName() (o string) {
   859  	if v != nil {
   860  		o = v.ServiceName
   861  	}
   862  	return
   863  }
   864  
   865  // GetEncoding returns the value of Encoding if it is set or its
   866  // zero value if it is unset.
   867  func (v *RPC) GetEncoding() (o string) {
   868  	if v != nil {
   869  		o = v.Encoding
   870  	}
   871  	return
   872  }
   873  
   874  // GetProcedure returns the value of Procedure if it is set or its
   875  // zero value if it is unset.
   876  func (v *RPC) GetProcedure() (o string) {
   877  	if v != nil {
   878  		o = v.Procedure
   879  	}
   880  	return
   881  }
   882  
   883  // GetHeaders returns the value of Headers if it is set or its
   884  // zero value if it is unset.
   885  func (v *RPC) GetHeaders() (o map[string]string) {
   886  	if v != nil && v.Headers != nil {
   887  		return v.Headers
   888  	}
   889  
   890  	return
   891  }
   892  
   893  // IsSetHeaders returns true if Headers is not nil.
   894  func (v *RPC) IsSetHeaders() bool {
   895  	return v != nil && v.Headers != nil
   896  }
   897  
   898  // GetShardKey returns the value of ShardKey if it is set or its
   899  // zero value if it is unset.
   900  func (v *RPC) GetShardKey() (o string) {
   901  	if v != nil && v.ShardKey != nil {
   902  		return *v.ShardKey
   903  	}
   904  
   905  	return
   906  }
   907  
   908  // IsSetShardKey returns true if ShardKey is not nil.
   909  func (v *RPC) IsSetShardKey() bool {
   910  	return v != nil && v.ShardKey != nil
   911  }
   912  
   913  // GetRoutingKey returns the value of RoutingKey if it is set or its
   914  // zero value if it is unset.
   915  func (v *RPC) GetRoutingKey() (o string) {
   916  	if v != nil && v.RoutingKey != nil {
   917  		return *v.RoutingKey
   918  	}
   919  
   920  	return
   921  }
   922  
   923  // IsSetRoutingKey returns true if RoutingKey is not nil.
   924  func (v *RPC) IsSetRoutingKey() bool {
   925  	return v != nil && v.RoutingKey != nil
   926  }
   927  
   928  // GetRoutingDelegate returns the value of RoutingDelegate if it is set or its
   929  // zero value if it is unset.
   930  func (v *RPC) GetRoutingDelegate() (o string) {
   931  	if v != nil && v.RoutingDelegate != nil {
   932  		return *v.RoutingDelegate
   933  	}
   934  
   935  	return
   936  }
   937  
   938  // IsSetRoutingDelegate returns true if RoutingDelegate is not nil.
   939  func (v *RPC) IsSetRoutingDelegate() bool {
   940  	return v != nil && v.RoutingDelegate != nil
   941  }
   942  
   943  // GetBody returns the value of Body if it is set or its
   944  // zero value if it is unset.
   945  func (v *RPC) GetBody() (o []byte) {
   946  	if v != nil && v.Body != nil {
   947  		return v.Body
   948  	}
   949  
   950  	return
   951  }
   952  
   953  // IsSetBody returns true if Body is not nil.
   954  func (v *RPC) IsSetBody() bool {
   955  	return v != nil && v.Body != nil
   956  }
   957  
   958  // ThriftModule represents the IDL file used to generate this package.
   959  var ThriftModule = &thriftreflect.ThriftModule{
   960  	Name:     "internal",
   961  	Package:  "go.uber.org/yarpc/serialize/internal",
   962  	FilePath: "internal.thrift",
   963  	SHA1:     "c60c5759efeaa1545aebd396d371509bc561b153",
   964  	Raw:      rawIDL,
   965  }
   966  
   967  const rawIDL = "struct RPC {\n\t1: required binary spanContext\n\n\t2: required string callerName\n\t3: required string serviceName\n\t4: required string encoding\n\t5: required string procedure\n\n\t6: optional map<string,string> headers\n\t7: optional string shardKey\n\t8: optional string routingKey\n\t9: optional string routingDelegate\n\t10: optional binary body\n}\n"