| /* |
| Copyright 2019 The Kubernetes Authors. |
| |
| Licensed 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 main |
| |
| import ( |
| "fmt" |
| "go/ast" |
| "go/token" |
| ) |
| |
| const ( |
| errNotDirectCall = "Opts for STABLE metric was not directly passed to new metric function" |
| errPositionalArguments = "Positional arguments are not supported" |
| errStabilityLevel = "StabilityLevel should be passed STABLE, BETA, ALPHA or removed" |
| errInvalidNewMetricCall = "Invalid new metric call, please ensure code compiles" |
| errNonStringAttribute = "Non string attribute is not supported" |
| errBadVariableAttribute = "Metric attribute was not correctly set. Please use only global consts in same file" |
| errBadImportedVariableAttribute = "Metric attribute was not correctly set. Please use only global consts in correctly imported same file" |
| errFieldNotSupported = "Field %s is not supported" |
| errBuckets = "Buckets should be set to list of floats, result from function call of prometheus.LinearBuckets or prometheus.ExponentialBuckets" |
| errObjectives = "Objectives should be set to map of floats to floats" |
| errDecodeUint32 = "Should decode to uint32" |
| errDecodeInt64 = "Should decode to int64" |
| |
| errLabels = "Labels were not set to list of strings" |
| errImport = `Importing using "." is not supported` |
| errExprNotIdent = "expr selector does not refer to type ast.Ident, is type %s" |
| |
| errorDecodingString = "can't decode string" |
| errorDecodingLabels = "can't decode labels" |
| errorDecodingConstLabels = "can't decode const labels" |
| errorDecodingStabilityLevel = "can't decode stability level" |
| errorFindingVariableForBuckets = "couldn't find variable for bucket" |
| errorFindingVariableForLabels = "couldn't find variable for labels" |
| ) |
| |
| type decodeError struct { |
| msg string |
| pos token.Pos |
| } |
| |
| func newDecodeErrorf(node ast.Node, format string, a ...interface{}) *decodeError { |
| return &decodeError{ |
| msg: fmt.Sprintf(format, a...), |
| pos: node.Pos(), |
| } |
| } |
| |
| var _ error = (*decodeError)(nil) |
| |
| func (e decodeError) Error() string { |
| return e.msg |
| } |
| |
| func (e decodeError) errorWithFileInformation(fileset *token.FileSet) error { |
| position := fileset.Position(e.pos) |
| return fmt.Errorf("%s:%d:%d: %s", position.Filename, position.Line, position.Column, e.msg) |
| } |