public virtual ReqlError Build()
        {
            ReqlError con;
            switch( ResponseType )
            {
                case Proto.ResponseType.CLIENT_ERROR:
                    con = new ReqlClientError(Msg);
                    break;
                case Proto.ResponseType.COMPILE_ERROR:
                    con = new ReqlServerCompileError(Msg);
                    break;
                case Proto.ResponseType.RUNTIME_ERROR:
                {
                    switch( ErrorType )
                    {
                        case Proto.ErrorType.INTERNAL:
                            con = new ReqlInternalError(Msg);
                            break;
                        case Proto.ErrorType.RESOURCE_LIMIT:
                            con = new ReqlResourceLimitError(Msg);
                            break;
                        case Proto.ErrorType.QUERY_LOGIC:
                            con = new ReqlQueryLogicError(Msg);
                            break;
                        case Proto.ErrorType.NON_EXISTENCE:
                            con = new ReqlNonExistenceError(Msg);
                            break;
                        case Proto.ErrorType.OP_FAILED:
                            con = new ReqlOpFailedError(Msg);
                            break;
                        case Proto.ErrorType.OP_INDETERMINATE:
                            con = new ReqlOpIndeterminateError(Msg);
                            break;
                        case Proto.ErrorType.USER:
                            con = new ReqlUserError(Msg);
                            break;
                        case Proto.ErrorType.PERMISSION_ERROR:
                            con = new ReqlPermissionError(Msg);
                            break;
                        default:
                            con = new ReqlRuntimeError(Msg);
                            break;
                    }
                    break;
                }
                default:
                    con = new ReqlError(Msg);
                    break;
            }

            con.Backtrace = this.Backtrace;
            con.Term = this.Term;

            return con;
        }
        public virtual ReqlError Build()
        {
            ReqlError con;

            switch (ResponseType)
            {
            case Proto.ResponseType.CLIENT_ERROR:
                con = new ReqlClientError(Msg);
                break;

            case Proto.ResponseType.COMPILE_ERROR:
                con = new ReqlServerCompileError(Msg);
                break;

            case Proto.ResponseType.RUNTIME_ERROR:
            {
                switch (ErrorType)
                {
                case Proto.ErrorType.INTERNAL:
                    con = new ReqlInternalError(Msg);
                    break;

                case Proto.ErrorType.RESOURCE_LIMIT:
                    con = new ReqlResourceLimitError(Msg);
                    break;

                case Proto.ErrorType.QUERY_LOGIC:
                    con = new ReqlQueryLogicError(Msg);
                    break;

                case Proto.ErrorType.NON_EXISTENCE:
                    con = new ReqlNonExistenceError(Msg);
                    break;

                case Proto.ErrorType.OP_FAILED:
                    con = new ReqlOpFailedError(Msg);
                    break;

                case Proto.ErrorType.OP_INDETERMINATE:
                    con = new ReqlOpIndeterminateError(Msg);
                    break;

                case Proto.ErrorType.USER:
                    con = new ReqlUserError(Msg);
                    break;

                case Proto.ErrorType.PERMISSION_ERROR:
                    con = new ReqlPermissionError(Msg);
                    break;

                default:
                    con = new ReqlRuntimeError(Msg);
                    break;
                }
                break;
            }

            default:
                con = new ReqlError(Msg);
                break;
            }

            con.Backtrace = this.Backtrace;
            con.Term      = this.Term;

            return(con);
        }