package api import ( "errors" "fmt" "github.com/SevereCloud/vksdk/v2/object" ) // ErrorType is the type of an error. type ErrorType int // Error returns the message of a ErrorType. func (e ErrorType) Error() string { return fmt.Sprintf("api: error with code %d", e) } // Error codes. See https://vk.com/dev/errors const ( ErrNoType ErrorType = 0 // NoType error // Unknown error occurred // // Try again later. ErrUnknown ErrorType = 1 // Application is disabled. Enable your application or use test mode // // You need to switch on the app in Settings // https://vk.com/editapp?id={Your API_ID} // or use the test mode (test_mode=1). ErrDisabled ErrorType = 2 // Unknown method passed. // // Check the method name: http://vk.com/dev/methods ErrMethod ErrorType = 3 ErrSignature ErrorType = 4 // Incorrect signature // User authorization failed // // Make sure that you use a correct authorization type. ErrAuth ErrorType = 5 // Too many requests per second // // Decrease the request frequency or use the execute method. // More details on frequency limits here: // https://vk.com/dev/api_requests ErrTooMany ErrorType = 6 // Permission to perform this action is denied // // Make sure that your have received required permissions during the // authorization. // You can do it with the account.getAppPermissions method. // https://vk.com/dev/permissions ErrPermission ErrorType = 7 // Invalid request // // Check the request syntax and used parameters list (it can be found on // a method description page). ErrRequest ErrorType = 8 // Flood control // // You need to decrease the count of identical requests. For more efficient // work you may use execute. ErrFlood ErrorType = 9 // Internal server error // // Try again later. ErrServer ErrorType = 10 // In test mode application should be disabled or user should be authorized // // Switch the app off in Settings: // // https://vk.com/editapp?id={Your API_ID} // ErrEnabledInTest ErrorType = 11 // Unable to compile code. ErrCompile ErrorType = 12 // Runtime error occurred during code invocation. ErrRuntime ErrorType = 13 // Captcha needed. // // See https://vk.com/dev/captcha_error ErrCaptcha ErrorType = 14 // Access denied // // Make sure that you use correct identifiers and the content is available // for the user in the full version of the site. ErrAccess ErrorType = 15 // HTTP authorization failed // // To avoid this error check if a user has the 'Use secure connection' // option enabled with the account.getInfo method. ErrAuthHTTPS ErrorType = 16 // Validation required // // Make sure that you don't use a token received with // http://vk.com/dev/auth_mobile for a request from the server. // It's restricted. // // https://vk.com/dev/need_validation ErrAuthValidation ErrorType = 17 ErrUserDeleted ErrorType = 18 // User was deleted or banned ErrBlocked ErrorType = 19 // Content blocked // Permission to perform this action is denied for non-standalone // applications. ErrMethodPermission ErrorType = 20 // Permission to perform this action is allowed only for standalone and // OpenAPI applications. ErrMethodAds ErrorType = 21 ErrUpload ErrorType = 22 // Upload error // This method was disabled. // // All the methods available now are listed here: http://vk.com/dev/methods ErrMethodDisabled ErrorType = 23 // Confirmation required // // In some cases VK requires to request action confirmation from the user // (for Standalone apps only). // // Following parameter is transmitted with the error message as well: // // confirmation_text – text of the message to be shown in the default // confirmation window. // // The app should display the default confirmation window // with text from confirmation_text and two buttons: "Continue" and // "Cancel". // If user confirms the action repeat the request with an extra parameter: // // confirm = 1. // // https://vk.com/dev/need_confirmation ErrNeedConfirmation ErrorType = 24 ErrNeedTokenConfirmation ErrorType = 25 // Token confirmation required ErrGroupAuth ErrorType = 27 // Group authorization failed ErrAppAuth ErrorType = 28 // Application authorization failed // Rate limit reached. // // More details on rate limits here: https://vk.com/dev/data_limits ErrRateLimit ErrorType = 29 ErrPrivateProfile ErrorType = 30 // This profile is private // Client version deprecated. ErrClientVersionDeprecated ErrorType = 34 // Method execution was interrupted due to timeout. ErrExecutionTimeout ErrorType = 36 // User was banned. ErrUserBanned ErrorType = 37 // Unknown application. ErrUnknownApplication ErrorType = 38 // Unknown user. ErrUnknownUser ErrorType = 39 // Unknown group. ErrUnknownGroup ErrorType = 40 // Additional signup required. ErrAdditionalSignupRequired ErrorType = 41 // IP is not allowed. ErrIPNotAllowed ErrorType = 42 // One of the parameters specified was missing or invalid // // Check the required parameters list and their format on a method // description page. ErrParam ErrorType = 100 // Invalid application API ID // // Find the app in the administrated list in settings: // http://vk.com/apps?act=settings // And set the correct API_ID in the request. ErrParamAPIID ErrorType = 101 ErrLimits ErrorType = 103 // Out of limits ErrNotFound ErrorType = 104 // Not found ErrSaveFile ErrorType = 105 // Couldn't save file ErrActionFailed ErrorType = 106 // Unable to process action // Invalid user id // // Make sure that you use a correct id. You can get an id using a screen // name with the utils.resolveScreenName method. ErrParamUserID ErrorType = 113 ErrParamAlbumID ErrorType = 114 // Invalid album id ErrParamServer ErrorType = 118 // Invalid server ErrParamTitle ErrorType = 119 // Invalid title ErrParamPhotos ErrorType = 122 // Invalid photos ErrParamHash ErrorType = 121 // Invalid hash ErrParamPhoto ErrorType = 129 // Invalid photo ErrParamGroupID ErrorType = 125 // Invalid group id ErrParamPageID ErrorType = 140 // Page not found ErrAccessPage ErrorType = 141 // Access to page denied // The mobile number of the user is unknown. ErrMobileNotActivated ErrorType = 146 // Application has insufficient funds. ErrInsufficientFunds ErrorType = 147 // Access to the menu of the user denied. ErrAccessMenu ErrorType = 148 // Invalid timestamp // // You may get a correct value with the utils.getServerTime method. ErrParamTimestamp ErrorType = 150 ErrFriendsListID ErrorType = 171 // Invalid list id // Reached the maximum number of lists. ErrFriendsListLimit ErrorType = 173 // Cannot add user himself as friend. ErrFriendsAddYourself ErrorType = 174 // Cannot add this user to friends as they have put you on their blacklist. ErrFriendsAddInEnemy ErrorType = 175 // Cannot add this user to friends as you put him on blacklist. ErrFriendsAddEnemy ErrorType = 176 // Cannot add this user to friends as user not found. ErrFriendsAddNotFound ErrorType = 177 ErrParamNoteID ErrorType = 180 // Note not found ErrAccessNote ErrorType = 181 // Access to note denied ErrAccessNoteComment ErrorType = 182 // You can't comment this note ErrAccessComment ErrorType = 183 // Access to comment denied // Access to album denied // // Make sure you use correct ids (owner_id is always positive for users, // negative for communities) and the current user has access to the // requested content in the full version of the site. ErrAccessAlbum ErrorType = 200 // Access to audio denied // // Make sure you use correct ids (owner_id is always positive for users, // negative for communities) and the current user has access to the // requested content in the full version of the site. ErrAccessAudio ErrorType = 201 // Access to group denied // // Make sure that the current user is a member or admin of the community // (for closed and private groups and events). ErrAccessGroup ErrorType = 203 // Access denied. ErrAccessVideo ErrorType = 204 // Access denied. ErrAccessMarket ErrorType = 205 // Access to wall's post denied. ErrWallAccessPost ErrorType = 210 // Access to wall's comment denied. ErrWallAccessComment ErrorType = 211 // Access to post comments denied. ErrWallAccessReplies ErrorType = 212 // Access to status replies denied. ErrWallAccessAddReply ErrorType = 213 // Access to adding post denied. ErrWallAddPost ErrorType = 214 // Advertisement post was recently added. ErrWallAdsPublished ErrorType = 219 // Too many recipients. ErrWallTooManyRecipients ErrorType = 220 // User disabled track name broadcast. ErrStatusNoAudio ErrorType = 221 // Hyperlinks are forbidden. ErrWallLinksForbidden ErrorType = 222 // Too many replies. ErrWallReplyOwnerFlood ErrorType = 223 // Too many ads posts. ErrWallAdsPostLimitReached ErrorType = 224 // Donut is disabled. ErrDonutDisabled ErrorType = 225 // Reaction can not be applied to the object. ErrLikesReactionCanNotBeApplied ErrorType = 232 // Access to poll denied. ErrPollsAccess ErrorType = 250 // Invalid answer id. ErrPollsAnswerID ErrorType = 252 // Invalid poll id. ErrPollsPollID ErrorType = 251 // Access denied, please vote first. ErrPollsAccessWithoutVote ErrorType = 253 // Access to the groups list is denied due to the user's privacy settings. ErrAccessGroups ErrorType = 260 // This album is full // // You need to delete the odd objects from the album or use another album. ErrAlbumFull ErrorType = 300 ErrAlbumsLimit ErrorType = 302 // Albums number limit is reached // Permission denied. You must enable votes processing in application // settings // // Check the app settings: // // http://vk.com/editapp?id={Your API_ID}§ion=payments // ErrVotesPermission ErrorType = 500 // Not enough votes. ErrVotes ErrorType = 503 // Not enough money on owner's balance. ErrNotEnoughMoney ErrorType = 504 // Permission denied. You have no access to operations specified with // given object(s). ErrAdsPermission ErrorType = 600 // Permission denied. You have requested too many actions this day. Try // later. ErrWeightedFlood ErrorType = 601 // Some part of the request has not been completed. ErrAdsPartialSuccess ErrorType = 602 // Some ads error occurred. ErrAdsSpecific ErrorType = 603 // Invalid domain. ErrAdsDomainInvalid ErrorType = 604 // Domain is forbidden. ErrAdsDomainForbidden ErrorType = 605 // Domain is reserved. ErrAdsDomainReserved ErrorType = 606 // Domain is occupied. ErrAdsDomainOccupied ErrorType = 607 // Domain is active. ErrAdsDomainActive ErrorType = 608 // Domain app is invalid. ErrAdsDomainAppInvalid ErrorType = 609 // Domain app is forbidden. ErrAdsDomainAppForbidden ErrorType = 610 // Application must be verified. ErrAdsApplicationMustBeVerified ErrorType = 611 // Application must be in domains list of site of ad unit. ErrAdsApplicationMustBeInDomainsList ErrorType = 612 // Application is blocked. ErrAdsApplicationBlocked ErrorType = 613 // Domain of type specified is forbidden in current office type. ErrAdsDomainTypeForbiddenInCurrentOffice ErrorType = 614 // Domain group is invalid. ErrAdsDomainGroupInvalid ErrorType = 615 // Domain group is forbidden. ErrAdsDomainGroupForbidden ErrorType = 616 // Domain app is blocked. ErrAdsDomainAppBlocked ErrorType = 617 // Domain group is not open. ErrAdsDomainGroupNotOpen ErrorType = 618 // Domain group is not possible to be joined to adsweb. ErrAdsDomainGroupNotPossibleJoined ErrorType = 619 // Domain group is blocked. ErrAdsDomainGroupBlocked ErrorType = 620 // Domain group has restriction: links are forbidden. ErrAdsDomainGroupLinksForbidden ErrorType = 621 // Domain group has restriction: excluded from search. ErrAdsDomainGroupExcludedFromSearch ErrorType = 622 // Domain group has restriction: cover is forbidden. ErrAdsDomainGroupCoverForbidden ErrorType = 623 // Domain group has wrong category. ErrAdsDomainGroupWrongCategory ErrorType = 624 // Domain group has wrong name. ErrAdsDomainGroupWrongName ErrorType = 625 // Domain group has low posts reach. ErrAdsDomainGroupLowPostsReach ErrorType = 626 // Domain group has wrong class. ErrAdsDomainGroupWrongClass ErrorType = 627 // Domain group is created recently. ErrAdsDomainGroupCreatedRecently ErrorType = 628 // Object deleted. ErrAdsObjectDeleted ErrorType = 629 // Lookalike request with same source already in progress. ErrAdsLookalikeRequestAlreadyInProgress ErrorType = 630 // Max count of lookalike requests per day reached. ErrAdsLookalikeRequestsLimit ErrorType = 631 // Given audience is too small. ErrAdsAudienceTooSmall ErrorType = 632 // Given audience is too large. ErrAdsAudienceTooLarge ErrorType = 633 // Lookalike request audience save already in progress. ErrAdsLookalikeAudienceSaveAlreadyInProgress ErrorType = 634 // Max count of lookalike request audience saves per day reached. ErrAdsLookalikeSavesLimit ErrorType = 635 // Max count of retargeting groups reached. ErrAdsRetargetingGroupsLimit ErrorType = 636 // Domain group has active nemesis punishment. ErrAdsDomainGroupActiveNemesisPunishment ErrorType = 637 // Cannot edit creator role. ErrGroupChangeCreator ErrorType = 700 // User should be in club. ErrGroupNotInClub ErrorType = 701 // Too many officers in club. ErrGroupTooManyOfficers ErrorType = 702 // You need to enable 2FA for this action. ErrGroupNeed2fa ErrorType = 703 // User needs to enable 2FA for this action. ErrGroupHostNeed2fa ErrorType = 704 // Too many addresses in club. ErrGroupTooManyAddresses ErrorType = 706 // "Application is not installed in community. ErrGroupAppIsNotInstalledInCommunity ErrorType = 711 // Invite link is invalid - expired, deleted or not exists. ErrGroupInvalidInviteLink ErrorType = 714 // This video is already added. ErrVideoAlreadyAdded ErrorType = 800 // Comments for this video are closed. ErrVideoCommentsClosed ErrorType = 801 // Can't send messages for users from blacklist. ErrMessagesUserBlocked ErrorType = 900 // Can't send messages for users without permission. ErrMessagesDenySend ErrorType = 901 // Can't send messages to this user due to their privacy settings. ErrMessagesPrivacy ErrorType = 902 // Value of ts or pts is too old. ErrMessagesTooOldPts ErrorType = 907 // Value of ts or pts is too new. ErrMessagesTooNewPts ErrorType = 908 // Can't edit this message, because it's too old. ErrMessagesEditExpired ErrorType = 909 // Can't sent this message, because it's too big. ErrMessagesTooBig ErrorType = 910 // Keyboard format is invalid. ErrMessagesKeyboardInvalid ErrorType = 911 // This is a chat bot feature, change this status in settings. ErrMessagesChatBotFeature ErrorType = 912 // Too many forwarded messages. ErrMessagesTooLongForwards ErrorType = 913 // Message is too long. ErrMessagesTooLongMessage ErrorType = 914 // You don't have access to this chat. ErrMessagesChatUserNoAccess ErrorType = 917 // You can't see invite link for this chat. ErrMessagesCantSeeInviteLink ErrorType = 919 // Can't edit this kind of message. ErrMessagesEditKindDisallowed ErrorType = 920 // Can't forward these messages. ErrMessagesCantFwd ErrorType = 921 // Can't delete this message for everybody. ErrMessagesCantDeleteForAll ErrorType = 924 // You are not admin of this chat. ErrMessagesChatNotAdmin ErrorType = 925 // Chat does not exist. ErrMessagesChatNotExist ErrorType = 927 // You can't change invite link for this chat. ErrMessagesCantChangeInviteLink ErrorType = 931 // Your community can't interact with this peer. ErrMessagesGroupPeerAccess ErrorType = 932 // User not found in chat. ErrMessagesChatUserNotInChat ErrorType = 935 // Contact not found. ErrMessagesContactNotFound ErrorType = 936 // Message request already send. ErrMessagesMessageRequestAlreadySend ErrorType = 939 // Too many posts in messages. ErrMessagesTooManyPosts ErrorType = 940 // Cannot pin one-time story. ErrMessagesCantPinOneTimeStory ErrorType = 942 // Cannot use this intent. ErrMessagesCantUseIntent ErrorType = 943 // Limits overflow for this intent. ErrMessagesLimitIntent ErrorType = 944 // Chat was disabled. ErrMessagesChatDisabled ErrorType = 945 // Chat not support. ErrMessagesChatNotSupported ErrorType = 946 // Can't add user to chat, because user has no access to group. ErrMessagesMemberAccessToGroupDenied ErrorType = 947 // Can't edit pinned message yet. ErrMessagesEditPinned ErrorType = 949 // Can't send message, reply timed out. ErrMessagesReplyTimedOut ErrorType = 950 // You can't access donut chat without subscription. ErrMessagesAccessDonutChat ErrorType = 962 // This user can't be added to the work chat, as they aren't an employe. ErrMessagesAccessWorkChat ErrorType = 967 // Invalid phone number. ErrParamPhone ErrorType = 1000 // This phone number is used by another user. ErrPhoneAlreadyUsed ErrorType = 1004 // Too many auth attempts, try again later. ErrAuthFloodError ErrorType = 1105 // Processing.. Try later. ErrAuthDelay ErrorType = 1112 // Anonymous token has expired. ErrAnonymousTokenExpired ErrorType = 1114 // Anonymous token is invalid. ErrAnonymousTokenInvalid ErrorType = 1116 // Invalid document id. ErrParamDocID ErrorType = 1150 // Access to document deleting is denied. ErrParamDocDeleteAccess ErrorType = 1151 // Invalid document title. ErrParamDocTitle ErrorType = 1152 // Access to document is denied. ErrParamDocAccess ErrorType = 1153 // Original photo was changed. ErrPhotoChanged ErrorType = 1160 // Too many feed lists. ErrTooManyLists ErrorType = 1170 // This achievement is already unlocked. ErrAppsAlreadyUnlocked ErrorType = 1251 // Subscription not found. ErrAppsSubscriptionNotFound ErrorType = 1256 // Subscription is in invalid status. ErrAppsSubscriptionInvalidStatus ErrorType = 1257 // Invalid screen name. ErrInvalidAddress ErrorType = 1260 // Catalog is not available for this user. ErrCommunitiesCatalogDisabled ErrorType = 1310 // Catalog categories are not available for this user. ErrCommunitiesCategoriesDisabled ErrorType = 1311 // Too late for restore. ErrMarketRestoreTooLate ErrorType = 1400 // Comments for this market are closed. ErrMarketCommentsClosed ErrorType = 1401 // Album not found. ErrMarketAlbumNotFound ErrorType = 1402 // Item not found. ErrMarketItemNotFound ErrorType = 1403 // Item already added to album. ErrMarketItemAlreadyAdded ErrorType = 1404 // Too many items. ErrMarketTooManyItems ErrorType = 1405 // Too many items in album. ErrMarketTooManyItemsInAlbum ErrorType = 1406 // Too many albums. ErrMarketTooManyAlbums ErrorType = 1407 // Item has bad links in description. ErrMarketItemHasBadLinks ErrorType = 1408 // Extended market not enabled. ErrMarketShopNotEnabled ErrorType = 1409 // Grouping items with different properties. ErrMarketGroupingItemsWithDifferentProperties ErrorType = 1412 // Grouping already has such variant. ErrMarketGroupingAlreadyHasSuchVariant ErrorType = 1413 // Variant not found. ErrMarketVariantNotFound ErrorType = 1416 // Property not found. ErrMarketPropertyNotFound ErrorType = 1417 // Grouping must have two or more items. ErrMarketGroupingMustContainMoreThanOneItem ErrorType = 1425 // Item must have distinct properties. ErrMarketGroupingItemsMustHaveDistinctProperties ErrorType = 1426 // Cart is empty. ErrMarketOrdersNoCartItems ErrorType = 1427 // Specify width, length, height and weight all together. ErrMarketInvalidDimensions ErrorType = 1429 // VK Pay status can not be changed. ErrMarketCantChangeVkpayStatus ErrorType = 1430 // Market was already enabled in this group. ErrMarketShopAlreadyEnabled ErrorType = 1431 // Market was already disabled in this group. ErrMarketShopAlreadyDisabled ErrorType = 1432 // Invalid image crop format. ErrMarketPhotosCropInvalidFormat ErrorType = 1433 // Crop bottom right corner is outside of the image. ErrMarketPhotosCropOverflow ErrorType = 1434 // Crop size is less than the minimum. ErrMarketPhotosCropSizeTooLow ErrorType = 1435 // Market not enabled. ErrMarketNotEnabled ErrorType = 1438 // Cart is empty. ErrMarketCartEmpty ErrorType = 1427 // Specify width, length, height and weight all together. ErrMarketSpecifyDimensions ErrorType = 1429 // VK Pay status can not be changed. ErrVKPayStatus ErrorType = 1430 // Market was already enabled in this group. ErrMarketAlreadyEnabled ErrorType = 1431 // Market was already disabled in this group. ErrMarketAlreadyDisabled ErrorType = 1432 // Main album can not be hidden. ErrMainAlbumCantHidden ErrorType = 1446 // Story has already expired. ErrStoryExpired ErrorType = 1600 // Incorrect reply privacy. ErrStoryIncorrectReplyPrivacy ErrorType = 1602 // Card not found. ErrPrettyCardsCardNotFound ErrorType = 1900 // Too many cards. ErrPrettyCardsTooManyCards ErrorType = 1901 // Card is connected to post. ErrPrettyCardsCardIsConnectedToPost ErrorType = 1902 // Servers number limit is reached. ErrCallbackServersLimit ErrorType = 2000 // Stickers are not purchased. ErrStickersNotPurchased ErrorType = 2100 // Too many favorite stickers. ErrStickersTooManyFavorites ErrorType = 2101 // Stickers are not favorite. ErrStickersNotFavorite ErrorType = 2102 // Specified link is incorrect (can't find source). ErrWallCheckLinkCantDetermineSource ErrorType = 3102 // Recaptcha needed. ErrRecaptcha ErrorType = 3300 // Phone validation needed. ErrPhoneValidation ErrorType = 3301 // Password validation needed. ErrPasswordValidation ErrorType = 3302 // Otp app validation needed. ErrOtpAppValidation ErrorType = 3303 // Email confirmation needed. ErrEmailConfirmation ErrorType = 3304 // Assert votes. ErrAssertVotes ErrorType = 3305 // Token extension required. ErrTokenExtension ErrorType = 3609 // User is deactivated. ErrUserDeactivated ErrorType = 3610 // Service is deactivated for user. ErrServiceDeactivated ErrorType = 3611 // Can't set AliExpress tag to this type of object. ErrAliExpressTag ErrorType = 3800 // Invalid upload response. ErrInvalidUploadResponse ErrorType = 5701 // Invalid upload hash. ErrInvalidUploadHash ErrorType = 5702 // Invalid upload user. ErrInvalidUploadUser ErrorType = 5703 // Invalid upload group. ErrInvalidUploadGroup ErrorType = 5704 // Invalid crop data. ErrInvalidCropData ErrorType = 5705 // To small avatar. ErrToSmallAvatar ErrorType = 5706 // Photo not found. ErrPhotoNotFound ErrorType = 5708 // Invalid Photo. ErrInvalidPhoto ErrorType = 5709 // Invalid hash. ErrInvalidHash ErrorType = 5710 ) // ErrorSubtype is the subtype of an error. type ErrorSubtype int // Error returns the message of a ErrorSubtype. func (e ErrorSubtype) Error() string { return fmt.Sprintf("api: error with subcode %d", e) } // Error struct VK. type Error struct { Code ErrorType `json:"error_code"` Subcode ErrorSubtype `json:"error_subcode"` Message string `json:"error_msg"` Text string `json:"error_text"` CaptchaSID string `json:"captcha_sid"` CaptchaImg string `json:"captcha_img"` // In some cases VK requires to request action confirmation from the user // (for Standalone apps only). Following error will be returned: // // Error code: 24 // Error text: Confirmation required // // Following parameter is transmitted with the error message as well: // // confirmation_text – text of the message to be shown in the default // confirmation window. // // The app should display the default confirmation window with text from // confirmation_text and two buttons: "Continue" and "Cancel". If user // confirms the action repeat the request with an extra parameter: // confirm = 1. // // See https://vk.com/dev/need_confirmation ConfirmationText string `json:"confirmation_text"` // In some cases VK requires a user validation procedure. . As a result // starting from API version 5.0 (for the older versions captcha_error // will be requested) following error will be returned as a reply to any // API request: // // Error code: 17 // Error text: Validation Required // // Following parameter is transmitted with an error message: // redirect_uri – a special address to open in a browser to pass the // validation procedure. // // After passing the validation a user will be redirected to the service // page: // // https://oauth.vk.com/blank.html#{Data required for validation} // // In case of successful validation following parameters will be // transmitted after #: // // https://oauth.vk.com/blank.html#success=1&access_token={NEW USER TOKEN}&user_id={USER ID} // // If a token was not received by https a new secret will be transmitted // as well. // // In case of unsuccessful validation following address is transmitted: // // https://oauth.vk.com/blank.html#fail=1 // // See https://vk.com/dev/need_validation RedirectURI string `json:"redirect_uri"` RequestParams []object.BaseRequestParam `json:"request_params"` } // Error returns the message of a Error. func (e Error) Error() string { return "api: " + e.Message } // Is unwraps its first argument sequentially looking for an error that matches // the second. func (e Error) Is(target error) bool { var tError *Error if errors.As(target, &tError) { return e.Code == tError.Code && e.Message == tError.Message } var tErrorType ErrorType if errors.As(target, &tErrorType) { return e.Code == tErrorType } return false } // ExecuteError struct. // // TODO: v3 Code is ErrorType. type ExecuteError struct { Method string `json:"method"` Code int `json:"error_code"` Msg string `json:"error_msg"` } // ExecuteErrors type. type ExecuteErrors []ExecuteError // Error returns the message of a ExecuteErrors. func (e ExecuteErrors) Error() string { return fmt.Sprintf("api: execute errors (%d)", len(e)) } // InvalidContentType type. type InvalidContentType struct { ContentType string } // Error returns the message of a InvalidContentType. func (e InvalidContentType) Error() string { return "api: invalid content-type" } // UploadError type. type UploadError struct { Err string `json:"error"` Code int `json:"error_code"` Descr string `json:"error_descr"` IsLogged bool `json:"error_is_logged"` } // Error returns the message of a UploadError. func (e UploadError) Error() string { if e.Err != "" { return "api: " + e.Err } return fmt.Sprintf("api: upload code %d", e.Code) } // AdsError struct. type AdsError struct { Code ErrorType `json:"error_code"` Desc string `json:"error_desc"` } // Error returns the message of a AdsError. func (e AdsError) Error() string { return "api: " + e.Desc } // Is unwraps its first argument sequentially looking for an error that matches // the second. func (e AdsError) Is(target error) bool { var tAdsError *AdsError if errors.As(target, &tAdsError) { return e.Code == tAdsError.Code && e.Desc == tAdsError.Desc } var tErrorType ErrorType if errors.As(target, &tErrorType) { return e.Code == tErrorType } return false }