blob: 61b335ecb58c72ee1aea3a519b88541946d58e23 [file] [log] [blame]
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
*/
package gremlingo
import (
"encoding/json"
"fmt"
"strings"
"github.com/apache/tinkerpop/gremlin-go/v3/driver/resources"
"github.com/nicksnyder/go-i18n/v2/i18n"
"golang.org/x/text/language"
)
type errorCode string
const (
// driverRemoteConnection.go errors
err0203SubmitBytecodeToClosedConnectionError errorCode = "E0203_DRIVER_REMOTE_CONNECTION_SUBMITBYTECODE_TO_CLOSED_CONNECTION_ERROR"
// graph.go errors
err0301GetPathObjectInvalidPathUnequalLengthsError errorCode = "E0301_GRAPH_GETPATHOBJECT_UNEQUAL_LABELS_OBJECTS_LENGTH_ERROR"
err0302GetPathObjectInvalidPathNonStringLabelError errorCode = "E0302_GRAPH_GETPATHOBJECT_NON_STRING_VALUE_IN_LABELS_ERROR"
err0303GetPathNoLabelFoundError errorCode = "E0303_GRAPH_GETPATHOBJECT_NO_LABEL_ERROR"
// graphBinary.go errors
err0401WriteTypeValueUnexpectedNullError errorCode = "E0401_GRAPH_BINARY_WRITETYPEVALUE_UNEXPECTED_NULL_ERROR"
err0402BytecodeWriterError errorCode = "E0402_GRAPH_BINARY_WRITER_BYTECODE_ERROR"
err0403WriteValueUnexpectedNullError errorCode = "E0403_GRAPH_BINARY_WRITEVALUE_UNEXPECTED_NULL_ERROR"
err0404ReadNullTypeError errorCode = "E0404_GRAPH_BINARY_READ_NULLTYPE_ERROR"
err0405ReadValueInvalidNullInputError errorCode = "E0405_GRAPH_BINARY_READVALUE_NULL_INPUT_ERROR"
err0406EnumReaderInvalidTypeError errorCode = "E0406_GRAPH_BINARY_ENUMREADER_INVALID_TYPE_ERROR"
err0407GetSerializerToWriteUnknownTypeError errorCode = "E0407_GRAPH_BINARY_GETSERIALIZERTOWRITE_UNKNOWN_TYPE_ERROR"
err0408GetSerializerToReadUnknownTypeError errorCode = "E0408_GRAPH_BINARY_GETSERIALIZERTOREAD_UNKNOWN_TYPE_ERROR"
err0409GetSerializerToReadUnknownCustomTypeError errorCode = "E0409_GRAPH_BINARY_GETSERIALIZERTOREAD_UNKNOWN_CUSTOM_TYPE_ERROR"
// response handling errors
err0501ResponseHandlerResultSetNotCreatedError errorCode = "E0501_PROTOCOL_RESPONSEHANDLER_NO_RESULTSET_ON_DATA_RECEIVE"
err0502ResponseHandlerError errorCode = "E0502_PROTOCOL_RESPONSEHANDLER_ERROR"
err0503ResponseHandlerAuthError errorCode = "E0503_PROTOCOL_RESPONSEHANDLER_AUTH_ERROR"
// result.go errors
err0601ResultNotVertexError errorCode = "E0601_RESULT_NOT_VERTEX_ERROR"
err0602ResultNotEdgeError errorCode = "E0602_RESULT_NOT_EDGE_ERROR"
err0603ResultNotElementError errorCode = "E0603_RESULT_NOT_ELEMENT_ERROR"
err0604ResultNotPathError errorCode = "E0604_RESULT_NOT_PATH_ERROR"
err0605ResultNotPropertyError errorCode = "E0605_RESULT_NOT_PROPERTY_ERROR"
err0606ResultNotVertexPropertyError errorCode = "E0606_RESULT_NOT_VERTEX_PROPERTY_ERROR"
err0607ResultNotTraverserError errorCode = "E0607_RESULT_NOT_TRAVERSER_ERROR"
err0608ResultNotSliceError errorCode = "E0608_RESULT_NOT_SLICE_ERROR"
// serializer.go errors
err0701ReadMapNullKeyError errorCode = "E0701_SERIALIZER_READMAP_NULL_KEY_ERROR"
err0703ReadMapNonStringKeyError errorCode = "E0703_SERIALIZER_READMAP_NON_STRING_KEY_ERROR"
err0704ConvertArgsNoSerializerError errorCode = "E0704_SERIALIZER_CONVERTARGS_NO_SERIALIZER_ERROR"
// traversal.go errors
err0901ToListAnonTraversalError errorCode = "E0901_TRAVERSAL_TOLIST_ANON_TRAVERSAL_ERROR"
err0902IterateAnonTraversalError errorCode = "E0902_TRAVERSAL_ITERATE_ANON_TRAVERSAL_ERROR"
err0903NextNoResultsLeftError errorCode = "E0903_TRAVERSAL_NEXT_NO_RESULTS_LEFT_ERROR"
// Bytecode.go errors
err1001ConvertArgumentChildTraversalNotFromAnonError errorCode = "E1001_BYTECODE_CHILD_T_NOT_ANON_ERROR"
// graphTraversal.go errors
err1101TransactionRepeatedOpenError errorCode = "E1101_TRANSACTION_REPEATED_OPEN_ERROR"
err1102TransactionRollbackNotOpenedError errorCode = "E1102_TRANSACTION_ROLLBACK_NOT_OPENED_ERROR"
err1103TransactionCommitNotOpenedError errorCode = "E1103_TRANSACTION_COMMIT_NOT_OPENED_ERROR"
err1104TransactionRepeatedCloseError errorCode = "E1104_TRANSACTION_REPEATED_CLOSE_ERROR"
)
var localizer *i18n.Localizer
func init() {
initializeLocalizer(language.English)
}
func initializeLocalizer(locale language.Tag) {
bundle := i18n.NewBundle(language.English)
bundle.RegisterUnmarshalFunc("json", json.Unmarshal)
// Register resource package here for additional languages.
langFile := "error-messages/en.json"
bundle.LoadMessageFileFS(resources.ErrorMessagesFS, langFile)
localizer = i18n.NewLocalizer(bundle, locale.String())
}
func newError(errorCode errorCode, args ...interface{}) error {
config := i18n.LocalizeConfig{
MessageID: string(errorCode),
}
localizedMessage, _ := localizer.Localize(&config)
return fmt.Errorf(localizedMessage, args...)
}
func isSameErrorCode(expectedError error, actualError error) bool {
return strings.HasPrefix(actualError.Error(), strings.Split(expectedError.Error(), ":")[0])
}