github.com/cloudwego/dynamicgo@v0.2.6-0.20240519101509-707f41b6b834/thrift/base/k-base.go (about)

     1  /**
     2   * Copyright 2023 CloudWeGo Authors.
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  
    17  package base
    18  
    19  import (
    20  	"bytes"
    21  	"fmt"
    22  	"reflect"
    23  	"strings"
    24  
    25  	"github.com/apache/thrift/lib/go/thrift"
    26  
    27  	"github.com/cloudwego/kitex/pkg/protocol/bthrift"
    28  )
    29  
    30  // unused protection
    31  var (
    32  	_ = fmt.Formatter(nil)
    33  	_ = (*bytes.Buffer)(nil)
    34  	_ = (*strings.Builder)(nil)
    35  	_ = reflect.Type(nil)
    36  	_ = thrift.TProtocol(nil)
    37  	_ = bthrift.BinaryWriter(nil)
    38  )
    39  
    40  func (p *TrafficEnv) FastRead(buf []byte) (int, error) {
    41  	var err error
    42  	var offset int
    43  	var l int
    44  	var fieldTypeId thrift.TType
    45  	var fieldId int16
    46  	_, l, err = bthrift.Binary.ReadStructBegin(buf)
    47  	offset += l
    48  	if err != nil {
    49  		goto ReadStructBeginError
    50  	}
    51  
    52  	for {
    53  		_, fieldTypeId, fieldId, l, err = bthrift.Binary.ReadFieldBegin(buf[offset:])
    54  		offset += l
    55  		if err != nil {
    56  			goto ReadFieldBeginError
    57  		}
    58  		if fieldTypeId == thrift.STOP {
    59  			break
    60  		}
    61  		switch fieldId {
    62  		case 1:
    63  			if fieldTypeId == thrift.BOOL {
    64  				l, err = p.FastReadField1(buf[offset:])
    65  				offset += l
    66  				if err != nil {
    67  					goto ReadFieldError
    68  				}
    69  			} else {
    70  				l, err = bthrift.Binary.Skip(buf[offset:], fieldTypeId)
    71  				offset += l
    72  				if err != nil {
    73  					goto SkipFieldError
    74  				}
    75  			}
    76  		case 2:
    77  			if fieldTypeId == thrift.STRING {
    78  				l, err = p.FastReadField2(buf[offset:])
    79  				offset += l
    80  				if err != nil {
    81  					goto ReadFieldError
    82  				}
    83  			} else {
    84  				l, err = bthrift.Binary.Skip(buf[offset:], fieldTypeId)
    85  				offset += l
    86  				if err != nil {
    87  					goto SkipFieldError
    88  				}
    89  			}
    90  		default:
    91  			l, err = bthrift.Binary.Skip(buf[offset:], fieldTypeId)
    92  			offset += l
    93  			if err != nil {
    94  				goto SkipFieldError
    95  			}
    96  		}
    97  
    98  		l, err = bthrift.Binary.ReadFieldEnd(buf[offset:])
    99  		offset += l
   100  		if err != nil {
   101  			goto ReadFieldEndError
   102  		}
   103  	}
   104  	l, err = bthrift.Binary.ReadStructEnd(buf[offset:])
   105  	offset += l
   106  	if err != nil {
   107  		goto ReadStructEndError
   108  	}
   109  
   110  	return offset, nil
   111  ReadStructBeginError:
   112  	return offset, thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err)
   113  ReadFieldBeginError:
   114  	return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err)
   115  ReadFieldError:
   116  	return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_TrafficEnv[fieldId]), err)
   117  SkipFieldError:
   118  	return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err)
   119  ReadFieldEndError:
   120  	return offset, thrift.PrependError(fmt.Sprintf("%T read field end error", p), err)
   121  ReadStructEndError:
   122  	return offset, thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err)
   123  }
   124  
   125  func (p *TrafficEnv) FastReadField1(buf []byte) (int, error) {
   126  	offset := 0
   127  
   128  	if v, l, err := bthrift.Binary.ReadBool(buf[offset:]); err != nil {
   129  		return offset, err
   130  	} else {
   131  		offset += l
   132  
   133  		p.Open = v
   134  
   135  	}
   136  	return offset, nil
   137  }
   138  
   139  func (p *TrafficEnv) FastReadField2(buf []byte) (int, error) {
   140  	offset := 0
   141  
   142  	if v, l, err := bthrift.Binary.ReadString(buf[offset:]); err != nil {
   143  		return offset, err
   144  	} else {
   145  		offset += l
   146  
   147  		p.Env = v
   148  
   149  	}
   150  	return offset, nil
   151  }
   152  
   153  // for compatibility
   154  func (p *TrafficEnv) FastWrite(buf []byte) int {
   155  	offset := 0
   156  	offset += bthrift.Binary.WriteStructBegin(buf[offset:], "TrafficEnv")
   157  	if p != nil {
   158  		offset += p.fastWriteField1(buf[offset:])
   159  		offset += p.fastWriteField2(buf[offset:])
   160  	}
   161  	offset += bthrift.Binary.WriteFieldStop(buf[offset:])
   162  	offset += bthrift.Binary.WriteStructEnd(buf[offset:])
   163  	return offset
   164  }
   165  
   166  func (p *TrafficEnv) BLength() int {
   167  	l := 0
   168  	l += bthrift.Binary.StructBeginLength("TrafficEnv")
   169  	if p != nil {
   170  		l += p.field1Length()
   171  		l += p.field2Length()
   172  	}
   173  	l += bthrift.Binary.FieldStopLength()
   174  	l += bthrift.Binary.StructEndLength()
   175  	return l
   176  }
   177  
   178  func (p *TrafficEnv) fastWriteField1(buf []byte) int {
   179  	offset := 0
   180  	offset += bthrift.Binary.WriteFieldBegin(buf[offset:], "Open", thrift.BOOL, 1)
   181  	offset += bthrift.Binary.WriteBool(buf[offset:], p.Open)
   182  
   183  	offset += bthrift.Binary.WriteFieldEnd(buf[offset:])
   184  	return offset
   185  }
   186  
   187  func (p *TrafficEnv) fastWriteField2(buf []byte) int {
   188  	offset := 0
   189  	offset += bthrift.Binary.WriteFieldBegin(buf[offset:], "Env", thrift.STRING, 2)
   190  	offset += bthrift.Binary.WriteString(buf[offset:], p.Env)
   191  
   192  	offset += bthrift.Binary.WriteFieldEnd(buf[offset:])
   193  	return offset
   194  }
   195  
   196  func (p *TrafficEnv) field1Length() int {
   197  	l := 0
   198  	l += bthrift.Binary.FieldBeginLength("Open", thrift.BOOL, 1)
   199  	l += bthrift.Binary.BoolLength(p.Open)
   200  
   201  	l += bthrift.Binary.FieldEndLength()
   202  	return l
   203  }
   204  
   205  func (p *TrafficEnv) field2Length() int {
   206  	l := 0
   207  	l += bthrift.Binary.FieldBeginLength("Env", thrift.STRING, 2)
   208  	l += bthrift.Binary.StringLength(p.Env)
   209  
   210  	l += bthrift.Binary.FieldEndLength()
   211  	return l
   212  }
   213  
   214  func (p *Base) FastRead(buf []byte) (int, error) {
   215  	var err error
   216  	var offset int
   217  	var l int
   218  	var fieldTypeId thrift.TType
   219  	var fieldId int16
   220  	_, l, err = bthrift.Binary.ReadStructBegin(buf)
   221  	offset += l
   222  	if err != nil {
   223  		goto ReadStructBeginError
   224  	}
   225  
   226  	for {
   227  		_, fieldTypeId, fieldId, l, err = bthrift.Binary.ReadFieldBegin(buf[offset:])
   228  		offset += l
   229  		if err != nil {
   230  			goto ReadFieldBeginError
   231  		}
   232  		if fieldTypeId == thrift.STOP {
   233  			break
   234  		}
   235  		switch fieldId {
   236  		case 1:
   237  			if fieldTypeId == thrift.STRING {
   238  				l, err = p.FastReadField1(buf[offset:])
   239  				offset += l
   240  				if err != nil {
   241  					goto ReadFieldError
   242  				}
   243  			} else {
   244  				l, err = bthrift.Binary.Skip(buf[offset:], fieldTypeId)
   245  				offset += l
   246  				if err != nil {
   247  					goto SkipFieldError
   248  				}
   249  			}
   250  		case 2:
   251  			if fieldTypeId == thrift.STRING {
   252  				l, err = p.FastReadField2(buf[offset:])
   253  				offset += l
   254  				if err != nil {
   255  					goto ReadFieldError
   256  				}
   257  			} else {
   258  				l, err = bthrift.Binary.Skip(buf[offset:], fieldTypeId)
   259  				offset += l
   260  				if err != nil {
   261  					goto SkipFieldError
   262  				}
   263  			}
   264  		case 3:
   265  			if fieldTypeId == thrift.STRING {
   266  				l, err = p.FastReadField3(buf[offset:])
   267  				offset += l
   268  				if err != nil {
   269  					goto ReadFieldError
   270  				}
   271  			} else {
   272  				l, err = bthrift.Binary.Skip(buf[offset:], fieldTypeId)
   273  				offset += l
   274  				if err != nil {
   275  					goto SkipFieldError
   276  				}
   277  			}
   278  		case 4:
   279  			if fieldTypeId == thrift.STRING {
   280  				l, err = p.FastReadField4(buf[offset:])
   281  				offset += l
   282  				if err != nil {
   283  					goto ReadFieldError
   284  				}
   285  			} else {
   286  				l, err = bthrift.Binary.Skip(buf[offset:], fieldTypeId)
   287  				offset += l
   288  				if err != nil {
   289  					goto SkipFieldError
   290  				}
   291  			}
   292  		case 5:
   293  			if fieldTypeId == thrift.STRUCT {
   294  				l, err = p.FastReadField5(buf[offset:])
   295  				offset += l
   296  				if err != nil {
   297  					goto ReadFieldError
   298  				}
   299  			} else {
   300  				l, err = bthrift.Binary.Skip(buf[offset:], fieldTypeId)
   301  				offset += l
   302  				if err != nil {
   303  					goto SkipFieldError
   304  				}
   305  			}
   306  		case 6:
   307  			if fieldTypeId == thrift.MAP {
   308  				l, err = p.FastReadField6(buf[offset:])
   309  				offset += l
   310  				if err != nil {
   311  					goto ReadFieldError
   312  				}
   313  			} else {
   314  				l, err = bthrift.Binary.Skip(buf[offset:], fieldTypeId)
   315  				offset += l
   316  				if err != nil {
   317  					goto SkipFieldError
   318  				}
   319  			}
   320  		default:
   321  			l, err = bthrift.Binary.Skip(buf[offset:], fieldTypeId)
   322  			offset += l
   323  			if err != nil {
   324  				goto SkipFieldError
   325  			}
   326  		}
   327  
   328  		l, err = bthrift.Binary.ReadFieldEnd(buf[offset:])
   329  		offset += l
   330  		if err != nil {
   331  			goto ReadFieldEndError
   332  		}
   333  	}
   334  	l, err = bthrift.Binary.ReadStructEnd(buf[offset:])
   335  	offset += l
   336  	if err != nil {
   337  		goto ReadStructEndError
   338  	}
   339  
   340  	return offset, nil
   341  ReadStructBeginError:
   342  	return offset, thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err)
   343  ReadFieldBeginError:
   344  	return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err)
   345  ReadFieldError:
   346  	return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Base[fieldId]), err)
   347  SkipFieldError:
   348  	return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err)
   349  ReadFieldEndError:
   350  	return offset, thrift.PrependError(fmt.Sprintf("%T read field end error", p), err)
   351  ReadStructEndError:
   352  	return offset, thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err)
   353  }
   354  
   355  func (p *Base) FastReadField1(buf []byte) (int, error) {
   356  	offset := 0
   357  
   358  	if v, l, err := bthrift.Binary.ReadString(buf[offset:]); err != nil {
   359  		return offset, err
   360  	} else {
   361  		offset += l
   362  
   363  		p.LogID = v
   364  
   365  	}
   366  	return offset, nil
   367  }
   368  
   369  func (p *Base) FastReadField2(buf []byte) (int, error) {
   370  	offset := 0
   371  
   372  	if v, l, err := bthrift.Binary.ReadString(buf[offset:]); err != nil {
   373  		return offset, err
   374  	} else {
   375  		offset += l
   376  
   377  		p.Caller = v
   378  
   379  	}
   380  	return offset, nil
   381  }
   382  
   383  func (p *Base) FastReadField3(buf []byte) (int, error) {
   384  	offset := 0
   385  
   386  	if v, l, err := bthrift.Binary.ReadString(buf[offset:]); err != nil {
   387  		return offset, err
   388  	} else {
   389  		offset += l
   390  
   391  		p.Addr = v
   392  
   393  	}
   394  	return offset, nil
   395  }
   396  
   397  func (p *Base) FastReadField4(buf []byte) (int, error) {
   398  	offset := 0
   399  
   400  	if v, l, err := bthrift.Binary.ReadString(buf[offset:]); err != nil {
   401  		return offset, err
   402  	} else {
   403  		offset += l
   404  
   405  		p.Client = v
   406  
   407  	}
   408  	return offset, nil
   409  }
   410  
   411  func (p *Base) FastReadField5(buf []byte) (int, error) {
   412  	offset := 0
   413  	p.TrafficEnv = NewTrafficEnv()
   414  	if l, err := p.TrafficEnv.FastRead(buf[offset:]); err != nil {
   415  		return offset, err
   416  	} else {
   417  		offset += l
   418  	}
   419  	return offset, nil
   420  }
   421  
   422  func (p *Base) FastReadField6(buf []byte) (int, error) {
   423  	offset := 0
   424  
   425  	_, _, size, l, err := bthrift.Binary.ReadMapBegin(buf[offset:])
   426  	offset += l
   427  	if err != nil {
   428  		return offset, err
   429  	}
   430  	p.Extra = make(map[string]string, size)
   431  	for i := 0; i < size; i++ {
   432  		var _key string
   433  		if v, l, err := bthrift.Binary.ReadString(buf[offset:]); err != nil {
   434  			return offset, err
   435  		} else {
   436  			offset += l
   437  
   438  			_key = v
   439  
   440  		}
   441  
   442  		var _val string
   443  		if v, l, err := bthrift.Binary.ReadString(buf[offset:]); err != nil {
   444  			return offset, err
   445  		} else {
   446  			offset += l
   447  
   448  			_val = v
   449  
   450  		}
   451  
   452  		p.Extra[_key] = _val
   453  	}
   454  	if l, err := bthrift.Binary.ReadMapEnd(buf[offset:]); err != nil {
   455  		return offset, err
   456  	} else {
   457  		offset += l
   458  	}
   459  	return offset, nil
   460  }
   461  
   462  // for compatibility
   463  func (p *Base) FastWrite(buf []byte) int {
   464  	offset := 0
   465  	offset += bthrift.Binary.WriteStructBegin(buf[offset:], "Base")
   466  	if p != nil {
   467  		offset += p.fastWriteField1(buf[offset:])
   468  		offset += p.fastWriteField2(buf[offset:])
   469  		offset += p.fastWriteField3(buf[offset:])
   470  		offset += p.fastWriteField4(buf[offset:])
   471  		offset += p.fastWriteField5(buf[offset:])
   472  		offset += p.fastWriteField6(buf[offset:])
   473  	}
   474  	offset += bthrift.Binary.WriteFieldStop(buf[offset:])
   475  	offset += bthrift.Binary.WriteStructEnd(buf[offset:])
   476  	return offset
   477  }
   478  
   479  func (p *Base) BLength() int {
   480  	l := 0
   481  	l += bthrift.Binary.StructBeginLength("Base")
   482  	if p != nil {
   483  		l += p.field1Length()
   484  		l += p.field2Length()
   485  		l += p.field3Length()
   486  		l += p.field4Length()
   487  		l += p.field5Length()
   488  		l += p.field6Length()
   489  	}
   490  	l += bthrift.Binary.FieldStopLength()
   491  	l += bthrift.Binary.StructEndLength()
   492  	return l
   493  }
   494  
   495  func (p *Base) fastWriteField1(buf []byte) int {
   496  	offset := 0
   497  	offset += bthrift.Binary.WriteFieldBegin(buf[offset:], "LogID", thrift.STRING, 1)
   498  	offset += bthrift.Binary.WriteString(buf[offset:], p.LogID)
   499  
   500  	offset += bthrift.Binary.WriteFieldEnd(buf[offset:])
   501  	return offset
   502  }
   503  
   504  func (p *Base) fastWriteField2(buf []byte) int {
   505  	offset := 0
   506  	offset += bthrift.Binary.WriteFieldBegin(buf[offset:], "Caller", thrift.STRING, 2)
   507  	offset += bthrift.Binary.WriteString(buf[offset:], p.Caller)
   508  
   509  	offset += bthrift.Binary.WriteFieldEnd(buf[offset:])
   510  	return offset
   511  }
   512  
   513  func (p *Base) fastWriteField3(buf []byte) int {
   514  	offset := 0
   515  	offset += bthrift.Binary.WriteFieldBegin(buf[offset:], "Addr", thrift.STRING, 3)
   516  	offset += bthrift.Binary.WriteString(buf[offset:], p.Addr)
   517  
   518  	offset += bthrift.Binary.WriteFieldEnd(buf[offset:])
   519  	return offset
   520  }
   521  
   522  func (p *Base) fastWriteField4(buf []byte) int {
   523  	offset := 0
   524  	offset += bthrift.Binary.WriteFieldBegin(buf[offset:], "Client", thrift.STRING, 4)
   525  	offset += bthrift.Binary.WriteString(buf[offset:], p.Client)
   526  
   527  	offset += bthrift.Binary.WriteFieldEnd(buf[offset:])
   528  	return offset
   529  }
   530  
   531  func (p *Base) fastWriteField5(buf []byte) int {
   532  	offset := 0
   533  	if p.IsSetTrafficEnv() {
   534  		offset += bthrift.Binary.WriteFieldBegin(buf[offset:], "TrafficEnv", thrift.STRUCT, 5)
   535  		offset += p.TrafficEnv.FastWrite(buf[offset:])
   536  		offset += bthrift.Binary.WriteFieldEnd(buf[offset:])
   537  	}
   538  	return offset
   539  }
   540  
   541  func (p *Base) fastWriteField6(buf []byte) int {
   542  	offset := 0
   543  	if p.IsSetExtra() {
   544  		offset += bthrift.Binary.WriteFieldBegin(buf[offset:], "Extra", thrift.MAP, 6)
   545  		offset += bthrift.Binary.WriteMapBegin(buf[offset:], thrift.STRING, thrift.STRING, len(p.Extra))
   546  		for k, v := range p.Extra {
   547  
   548  			offset += bthrift.Binary.WriteString(buf[offset:], k)
   549  
   550  			offset += bthrift.Binary.WriteString(buf[offset:], v)
   551  
   552  		}
   553  		offset += bthrift.Binary.WriteMapEnd(buf[offset:])
   554  		offset += bthrift.Binary.WriteFieldEnd(buf[offset:])
   555  	}
   556  	return offset
   557  }
   558  
   559  func (p *Base) field1Length() int {
   560  	l := 0
   561  	l += bthrift.Binary.FieldBeginLength("LogID", thrift.STRING, 1)
   562  	l += bthrift.Binary.StringLength(p.LogID)
   563  
   564  	l += bthrift.Binary.FieldEndLength()
   565  	return l
   566  }
   567  
   568  func (p *Base) field2Length() int {
   569  	l := 0
   570  	l += bthrift.Binary.FieldBeginLength("Caller", thrift.STRING, 2)
   571  	l += bthrift.Binary.StringLength(p.Caller)
   572  
   573  	l += bthrift.Binary.FieldEndLength()
   574  	return l
   575  }
   576  
   577  func (p *Base) field3Length() int {
   578  	l := 0
   579  	l += bthrift.Binary.FieldBeginLength("Addr", thrift.STRING, 3)
   580  	l += bthrift.Binary.StringLength(p.Addr)
   581  
   582  	l += bthrift.Binary.FieldEndLength()
   583  	return l
   584  }
   585  
   586  func (p *Base) field4Length() int {
   587  	l := 0
   588  	l += bthrift.Binary.FieldBeginLength("Client", thrift.STRING, 4)
   589  	l += bthrift.Binary.StringLength(p.Client)
   590  
   591  	l += bthrift.Binary.FieldEndLength()
   592  	return l
   593  }
   594  
   595  func (p *Base) field5Length() int {
   596  	l := 0
   597  	if p.IsSetTrafficEnv() {
   598  		l += bthrift.Binary.FieldBeginLength("TrafficEnv", thrift.STRUCT, 5)
   599  		l += p.TrafficEnv.BLength()
   600  		l += bthrift.Binary.FieldEndLength()
   601  	}
   602  	return l
   603  }
   604  
   605  func (p *Base) field6Length() int {
   606  	l := 0
   607  	if p.IsSetExtra() {
   608  		l += bthrift.Binary.FieldBeginLength("Extra", thrift.MAP, 6)
   609  		l += bthrift.Binary.MapBeginLength(thrift.STRING, thrift.STRING, len(p.Extra))
   610  		for k, v := range p.Extra {
   611  
   612  			l += bthrift.Binary.StringLength(k)
   613  
   614  			l += bthrift.Binary.StringLength(v)
   615  
   616  		}
   617  		l += bthrift.Binary.MapEndLength()
   618  		l += bthrift.Binary.FieldEndLength()
   619  	}
   620  	return l
   621  }
   622  
   623  func (p *BaseResp) FastRead(buf []byte) (int, error) {
   624  	var err error
   625  	var offset int
   626  	var l int
   627  	var fieldTypeId thrift.TType
   628  	var fieldId int16
   629  	_, l, err = bthrift.Binary.ReadStructBegin(buf)
   630  	offset += l
   631  	if err != nil {
   632  		goto ReadStructBeginError
   633  	}
   634  
   635  	for {
   636  		_, fieldTypeId, fieldId, l, err = bthrift.Binary.ReadFieldBegin(buf[offset:])
   637  		offset += l
   638  		if err != nil {
   639  			goto ReadFieldBeginError
   640  		}
   641  		if fieldTypeId == thrift.STOP {
   642  			break
   643  		}
   644  		switch fieldId {
   645  		case 1:
   646  			if fieldTypeId == thrift.STRING {
   647  				l, err = p.FastReadField1(buf[offset:])
   648  				offset += l
   649  				if err != nil {
   650  					goto ReadFieldError
   651  				}
   652  			} else {
   653  				l, err = bthrift.Binary.Skip(buf[offset:], fieldTypeId)
   654  				offset += l
   655  				if err != nil {
   656  					goto SkipFieldError
   657  				}
   658  			}
   659  		case 2:
   660  			if fieldTypeId == thrift.I32 {
   661  				l, err = p.FastReadField2(buf[offset:])
   662  				offset += l
   663  				if err != nil {
   664  					goto ReadFieldError
   665  				}
   666  			} else {
   667  				l, err = bthrift.Binary.Skip(buf[offset:], fieldTypeId)
   668  				offset += l
   669  				if err != nil {
   670  					goto SkipFieldError
   671  				}
   672  			}
   673  		case 3:
   674  			if fieldTypeId == thrift.MAP {
   675  				l, err = p.FastReadField3(buf[offset:])
   676  				offset += l
   677  				if err != nil {
   678  					goto ReadFieldError
   679  				}
   680  			} else {
   681  				l, err = bthrift.Binary.Skip(buf[offset:], fieldTypeId)
   682  				offset += l
   683  				if err != nil {
   684  					goto SkipFieldError
   685  				}
   686  			}
   687  		default:
   688  			l, err = bthrift.Binary.Skip(buf[offset:], fieldTypeId)
   689  			offset += l
   690  			if err != nil {
   691  				goto SkipFieldError
   692  			}
   693  		}
   694  
   695  		l, err = bthrift.Binary.ReadFieldEnd(buf[offset:])
   696  		offset += l
   697  		if err != nil {
   698  			goto ReadFieldEndError
   699  		}
   700  	}
   701  	l, err = bthrift.Binary.ReadStructEnd(buf[offset:])
   702  	offset += l
   703  	if err != nil {
   704  		goto ReadStructEndError
   705  	}
   706  
   707  	return offset, nil
   708  ReadStructBeginError:
   709  	return offset, thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err)
   710  ReadFieldBeginError:
   711  	return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err)
   712  ReadFieldError:
   713  	return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_BaseResp[fieldId]), err)
   714  SkipFieldError:
   715  	return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err)
   716  ReadFieldEndError:
   717  	return offset, thrift.PrependError(fmt.Sprintf("%T read field end error", p), err)
   718  ReadStructEndError:
   719  	return offset, thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err)
   720  }
   721  
   722  func (p *BaseResp) FastReadField1(buf []byte) (int, error) {
   723  	offset := 0
   724  
   725  	if v, l, err := bthrift.Binary.ReadString(buf[offset:]); err != nil {
   726  		return offset, err
   727  	} else {
   728  		offset += l
   729  
   730  		p.StatusMessage = v
   731  
   732  	}
   733  	return offset, nil
   734  }
   735  
   736  func (p *BaseResp) FastReadField2(buf []byte) (int, error) {
   737  	offset := 0
   738  
   739  	if v, l, err := bthrift.Binary.ReadI32(buf[offset:]); err != nil {
   740  		return offset, err
   741  	} else {
   742  		offset += l
   743  
   744  		p.StatusCode = v
   745  
   746  	}
   747  	return offset, nil
   748  }
   749  
   750  func (p *BaseResp) FastReadField3(buf []byte) (int, error) {
   751  	offset := 0
   752  
   753  	_, _, size, l, err := bthrift.Binary.ReadMapBegin(buf[offset:])
   754  	offset += l
   755  	if err != nil {
   756  		return offset, err
   757  	}
   758  	p.Extra = make(map[string]string, size)
   759  	for i := 0; i < size; i++ {
   760  		var _key string
   761  		if v, l, err := bthrift.Binary.ReadString(buf[offset:]); err != nil {
   762  			return offset, err
   763  		} else {
   764  			offset += l
   765  
   766  			_key = v
   767  
   768  		}
   769  
   770  		var _val string
   771  		if v, l, err := bthrift.Binary.ReadString(buf[offset:]); err != nil {
   772  			return offset, err
   773  		} else {
   774  			offset += l
   775  
   776  			_val = v
   777  
   778  		}
   779  
   780  		p.Extra[_key] = _val
   781  	}
   782  	if l, err := bthrift.Binary.ReadMapEnd(buf[offset:]); err != nil {
   783  		return offset, err
   784  	} else {
   785  		offset += l
   786  	}
   787  	return offset, nil
   788  }
   789  
   790  // for compatibility
   791  func (p *BaseResp) FastWrite(buf []byte) int {
   792  	offset := 0
   793  	offset += bthrift.Binary.WriteStructBegin(buf[offset:], "BaseResp")
   794  	if p != nil {
   795  		offset += p.fastWriteField2(buf[offset:])
   796  		offset += p.fastWriteField1(buf[offset:])
   797  		offset += p.fastWriteField3(buf[offset:])
   798  	}
   799  	offset += bthrift.Binary.WriteFieldStop(buf[offset:])
   800  	offset += bthrift.Binary.WriteStructEnd(buf[offset:])
   801  	return offset
   802  }
   803  
   804  func (p *BaseResp) BLength() int {
   805  	l := 0
   806  	l += bthrift.Binary.StructBeginLength("BaseResp")
   807  	if p != nil {
   808  		l += p.field1Length()
   809  		l += p.field2Length()
   810  		l += p.field3Length()
   811  	}
   812  	l += bthrift.Binary.FieldStopLength()
   813  	l += bthrift.Binary.StructEndLength()
   814  	return l
   815  }
   816  
   817  func (p *BaseResp) fastWriteField1(buf []byte) int {
   818  	offset := 0
   819  	offset += bthrift.Binary.WriteFieldBegin(buf[offset:], "StatusMessage", thrift.STRING, 1)
   820  	offset += bthrift.Binary.WriteString(buf[offset:], p.StatusMessage)
   821  
   822  	offset += bthrift.Binary.WriteFieldEnd(buf[offset:])
   823  	return offset
   824  }
   825  
   826  func (p *BaseResp) fastWriteField2(buf []byte) int {
   827  	offset := 0
   828  	offset += bthrift.Binary.WriteFieldBegin(buf[offset:], "StatusCode", thrift.I32, 2)
   829  	offset += bthrift.Binary.WriteI32(buf[offset:], p.StatusCode)
   830  
   831  	offset += bthrift.Binary.WriteFieldEnd(buf[offset:])
   832  	return offset
   833  }
   834  
   835  func (p *BaseResp) fastWriteField3(buf []byte) int {
   836  	offset := 0
   837  	if p.IsSetExtra() {
   838  		offset += bthrift.Binary.WriteFieldBegin(buf[offset:], "Extra", thrift.MAP, 3)
   839  		offset += bthrift.Binary.WriteMapBegin(buf[offset:], thrift.STRING, thrift.STRING, len(p.Extra))
   840  		for k, v := range p.Extra {
   841  
   842  			offset += bthrift.Binary.WriteString(buf[offset:], k)
   843  
   844  			offset += bthrift.Binary.WriteString(buf[offset:], v)
   845  
   846  		}
   847  		offset += bthrift.Binary.WriteMapEnd(buf[offset:])
   848  		offset += bthrift.Binary.WriteFieldEnd(buf[offset:])
   849  	}
   850  	return offset
   851  }
   852  
   853  func (p *BaseResp) field1Length() int {
   854  	l := 0
   855  	l += bthrift.Binary.FieldBeginLength("StatusMessage", thrift.STRING, 1)
   856  	l += bthrift.Binary.StringLength(p.StatusMessage)
   857  
   858  	l += bthrift.Binary.FieldEndLength()
   859  	return l
   860  }
   861  
   862  func (p *BaseResp) field2Length() int {
   863  	l := 0
   864  	l += bthrift.Binary.FieldBeginLength("StatusCode", thrift.I32, 2)
   865  	l += bthrift.Binary.I32Length(p.StatusCode)
   866  
   867  	l += bthrift.Binary.FieldEndLength()
   868  	return l
   869  }
   870  
   871  func (p *BaseResp) field3Length() int {
   872  	l := 0
   873  	if p.IsSetExtra() {
   874  		l += bthrift.Binary.FieldBeginLength("Extra", thrift.MAP, 3)
   875  		l += bthrift.Binary.MapBeginLength(thrift.STRING, thrift.STRING, len(p.Extra))
   876  		for k, v := range p.Extra {
   877  
   878  			l += bthrift.Binary.StringLength(k)
   879  
   880  			l += bthrift.Binary.StringLength(v)
   881  
   882  		}
   883  		l += bthrift.Binary.MapEndLength()
   884  		l += bthrift.Binary.FieldEndLength()
   885  	}
   886  	return l
   887  }