-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsecondary_units.go
103 lines (93 loc) · 4.13 KB
/
secondary_units.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package addy
import "strings"
// secondary units are the standard USPS abbreviations:
// https://pe.usps.com/text/pub28/28apc_003.htm
const (
secondaryUnitApartment string = "APT"
secondaryUnitBasement string = "BSMT"
secondaryUnitBuilding string = "BLDG"
secondaryUnitDepartment string = "DEPT"
secondaryUnitFloor string = "FL"
secondaryUnitFront string = "FRNT"
secondaryUnitHanger string = "HNGR"
secondaryUnitKey string = "KEY"
secondaryUnitLobby string = "LBBY"
secondaryUnitLot string = "LOT"
secondaryUnitLower string = "LOWR"
secondaryUnitOffice string = "OFC"
secondaryUnitPenthouse string = "PH"
secondaryUnitPier string = "PIER"
secondaryUnitRear string = "REAR"
secondaryUnitRoom string = "RM"
secondaryUnitSide string = "SIDE"
secondaryUnitSlip string = "SLIP"
secondaryUnitSpace string = "SPC"
secondaryUnitStop string = "STOP"
secondaryUnitSuite string = "STE"
secondaryUnitTrailer string = "TRLR"
secondaryUnitUnit string = "UNIT"
secondaryUnitUpper string = "UPPR"
// A couple extra not officially specified as secondary units.
secondaryUnitPO string = "PO"
secondaryUnitBox string = "BOX"
)
var secondaryUnitNormalizations = map[string]string{
secondaryUnitApartment: secondaryUnitApartment,
"APARTMENT": secondaryUnitApartment,
secondaryUnitBasement: secondaryUnitBasement,
"BASEMENT": secondaryUnitBasement,
secondaryUnitBuilding: secondaryUnitBuilding,
"BUILDING": secondaryUnitBuilding,
secondaryUnitDepartment: secondaryUnitDepartment,
"DEPARTMENT": secondaryUnitDepartment,
secondaryUnitFloor: secondaryUnitFloor,
"FLOOR": secondaryUnitFloor,
secondaryUnitFront: secondaryUnitFront,
"FRONT": secondaryUnitFront,
secondaryUnitHanger: secondaryUnitHanger,
"HANGER": secondaryUnitHanger,
secondaryUnitKey: secondaryUnitKey,
secondaryUnitLobby: secondaryUnitLobby,
"LOBBY": secondaryUnitLobby,
secondaryUnitLot: secondaryUnitLot,
secondaryUnitLower: secondaryUnitLower,
"LOWER": secondaryUnitLower,
secondaryUnitOffice: secondaryUnitOffice,
"OFFICE": secondaryUnitOffice,
secondaryUnitPenthouse: secondaryUnitPenthouse,
"PENTHOUSE": secondaryUnitPenthouse,
secondaryUnitPier: secondaryUnitPier,
secondaryUnitRear: secondaryUnitRear,
secondaryUnitRoom: secondaryUnitRoom,
"ROOM": secondaryUnitRoom,
secondaryUnitSide: secondaryUnitSide,
secondaryUnitSlip: secondaryUnitSlip,
secondaryUnitSpace: secondaryUnitSpace,
"SPACE": secondaryUnitSpace,
secondaryUnitStop: secondaryUnitStop,
secondaryUnitSuite: secondaryUnitSuite,
"SUITE": secondaryUnitSuite,
secondaryUnitTrailer: secondaryUnitTrailer,
"TRAILER": secondaryUnitTrailer,
secondaryUnitUnit: secondaryUnitUnit,
secondaryUnitUpper: secondaryUnitUpper,
"UPPER": secondaryUnitUpper,
// A couple extra not officially specified as secondary units.
secondaryUnitPO: secondaryUnitPO,
"P.O.": secondaryUnitPO,
secondaryUnitBox: secondaryUnitBox,
}
// normalizeSecondaryUnit will normalize any string it determines to be a secondary unit requiring normalization.
// Otherwise it will just return what was passed in. The boolean it returns is true if the string
// was found in the lookup table.
func normalizeSecondaryUnit(s string, normOpts normalizationOptions) (string, bool) {
normalized, foundInLookup := normalize(s, secondaryUnitNormalizations, normOpts)
// Special case for the PO secondary unit. It should normally always be returned as PO unless
// the override option is specified, meaning that it should adhere to the casing option.
// So, if the option is not specified, override whatever casing was applied to it so it is
// reverted to uppercase.
if !normOpts.exludePOCasing && strings.ToUpper(normalized) == secondaryUnitPO {
normalized = secondaryUnitPO
}
return normalized, foundInLookup
}