Example #1
0
func (t *RpcResult) Read(decoder tl.Decoder, waitress tl.Waitress, session uuid.UUID) (err error) {
	t.ReqMsgId, err = decoder.ReadLong()
	if err != nil {
		return
	}

	var res_err, err_err error
	// try to get bare constructor from waitress
	// track to res_err
	if cons_id, _, _, res_err := waitress.GetResult(session, t.ReqMsgId); res_err == nil {
		result_box := &ObjectBox{}
		if res_err = result_box.Bind(cons_id); res_err == nil {
			t.Result, res_err = result_box.Bare()
		}
	}

	// Check for error
	if peek_cons_id, err_err := decoder.PeekType(); err_err == nil && peek_cons_id == TL_ID_RPC_ERROR {
		// got err - read it and return
		err_box := (&RpcError{}).Box()
		if err_err = err_box.Read(decoder, waitress, session); err_err == nil {
			if err_bare, err_err := err_box.Bare(); err_err == nil {
				t.RpcError = err_bare.(*RpcError)
			}
		}
	}
	if res_err == nil && err_err == nil && t.RpcError == nil {
		res_err = t.Result.Read(decoder, waitress, session)
	}
	// return one of res_err or err_err
	if res_err != nil {
		err = res_err
	} else if err_err != nil {
		err = err_err
	}

	return
}