@@ -171,8 +171,15 @@ private extension ShippingLabelStore {
171171 func createPackage( siteID: Int64 ,
172172 customPackage: ShippingLabelCustomPackage ? ,
173173 predefinedOption: ShippingLabelPredefinedOption ? ,
174- completion: @escaping ( Result < Bool , Error > ) -> Void ) {
175- remote. createPackage ( siteID: siteID, customPackage: customPackage, predefinedOption: predefinedOption, completion: completion)
174+ completion: @escaping ( Result < Bool , PackageCreationError > ) -> Void ) {
175+ remote. createPackage ( siteID: siteID, customPackage: customPackage, predefinedOption: predefinedOption) { result in
176+ switch result {
177+ case . success( let success) :
178+ completion ( . success( success) )
179+ case . failure( let error) :
180+ completion ( . failure( PackageCreationError ( error: error) ) )
181+ }
182+ }
176183 }
177184
178185 func loadCarriersAndRates( siteID: Int64 ,
@@ -477,3 +484,56 @@ public enum LabelPurchaseError: Error {
477484 /// Label purchase not complete after polling the backend
478485 case purchaseIncomplete
479486}
487+
488+ /// An error that occurs while creating a package.
489+ ///
490+ /// - duplicateCustomPackageNames: The new custom package names are not unique.
491+ /// - duplicatePackageNames: At least one of the new custom packages has the same name as existing packages.
492+ /// - duplicatePredefinedPackageNames: The new predefined package names are not unique.
493+ /// - duplicateNamesByCarrier: At least one of the new predefined packages has the same name as existing packages.
494+ /// - unknown: other error cases.
495+ ///
496+ public enum PackageCreationError : Error , Equatable {
497+ case duplicateCustomPackageNames
498+ case duplicatePackageNames
499+ case duplicatePredefinedPackageNames
500+ case duplicateNamesByCarrier
501+ case unknown( error: AnyError )
502+
503+ init ( error: Error ) {
504+ guard let dotcomError = error as? DotcomError else {
505+ self = . unknown( error: error. toAnyError)
506+ return
507+ }
508+ switch dotcomError {
509+ case . unknown( let code, _) :
510+ guard let errorCode = ErrorCode ( rawValue: code) else {
511+ self = . unknown( error: dotcomError. toAnyError)
512+ return
513+ }
514+ self = errorCode. error
515+ default :
516+ self = . unknown( error: dotcomError. toAnyError)
517+ }
518+ }
519+
520+ private enum ErrorCode : String {
521+ case duplicateCustomPackageNames = " duplicate_custom_package_names "
522+ case duplicatePackageNames = " duplicate_custom_package_names_of_existing_packages "
523+ case duplicatePredefinedPackageNames = " duplicate_predefined_package_names "
524+ case duplicateNamesByCarrier = " duplicate_predefined_package_names_of_existing_packages "
525+
526+ var error : PackageCreationError {
527+ switch self {
528+ case . duplicateCustomPackageNames:
529+ return . duplicateCustomPackageNames
530+ case . duplicatePredefinedPackageNames:
531+ return . duplicatePredefinedPackageNames
532+ case . duplicatePackageNames:
533+ return . duplicatePackageNames
534+ case . duplicateNamesByCarrier:
535+ return . duplicateNamesByCarrier
536+ }
537+ }
538+ }
539+ }
0 commit comments