1 // Copyright (C) 2013 Google Inc.
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 // An object to store a single address: country code, administrative area,
16 // locality, etc. The field names correspond to OASIS xAL standard:
17 // https://www.oasis-open.org/committees/ciq/Downloads/ciq_html_docs.zip
19 #ifndef I18N_ADDRESSINPUT_ADDRESS_DATA_H_
20 #define I18N_ADDRESSINPUT_ADDRESS_DATA_H_
22 #include <libaddressinput/address_field.h>
28 namespace addressinput {
30 // Stores an address. Sample usage:
31 // AddressData address;
32 // address.recipient = "Chen-Kang Yang";
33 // address.organization = "Google";
34 // address.address_lines.push_back("1098 Alta Ave");
35 // address.administrative_area = "CA";
36 // address.locality = "Mountain View";
37 // address.postal_code = "94043";
38 // address.country_code = "US";
39 // address.language_code = "en";
42 // Clears |lines| and populates it with the lines of the address as they
43 // should appear on an envelope for |country_code|. The |lines| parameter
44 // should not be NULL.
46 // If there're no address formatting rules for |country_code|, then the
47 // default rules are used:
48 // https://i18napis.appspot.com/ssl-address/data/ZZ
49 void FormatForDisplay(std::vector<std::string>* lines) const;
51 // Returns the value of the |field|. The parameter should not be
52 // STREET_ADDRESS, which comprises multiple fields.
53 const std::string& GetFieldValue(AddressField field) const;
55 // Sets the |field| to |value|. The parameter should not be STREET_ADDRESS,
56 // which comprises multiple fields.
57 void SetFieldValue(AddressField field, const std::string& value);
59 // Returns true if all required fields are present (non-empty).
60 bool HasAllRequiredFields() const;
62 // The BCP 47 language code used to guide how the address is formatted for
63 // display. The same address may have different representations in different
65 // For example, the French name of "New Mexico" is "Nouveau-Mexique".
66 std::string language_code;
68 // The uppercase CLDR country/region code.
69 // For example, "US" for United States.
70 // (Note: Use "GB", not "UK", for Great Britain.)
71 std::string country_code;
73 // Top-level administrative subdivision of this country.
74 // Examples: US state, IT region, UK constituent nation, JP prefecture.
75 std::string administrative_area;
77 // Generally refers to the city/town portion of an address.
78 // Examples: US city, IT comune, UK post town.
81 // Dependent locality or sublocality. Used for UK dependent localities, or
82 // neighborhoods or boroughs in other locations.
83 std::string dependent_locality;
85 // Identifies recipients of large volumes of mail. Used in only a few
87 // Examples: FR CEDEX.
88 std::string sorting_code;
90 // The alphanumeric value generally assigned to geographical areas, but
91 // sometimes also assigned to individual addresses.
92 // Examples: "94043", "94043-1351", "SW1W", "SW1W 9TQ".
93 std::string postal_code;
95 // The free format street address lines.
96 std::vector<std::string> address_lines;
98 // The firm, company, or organization.
99 std::string organization;
101 // The name of the recipient or contact person. Not present in xAL.
102 std::string recipient;
105 } // namespace addressinput
108 #endif // I18N_ADDRESSINPUT_ADDRESS_DATA_H_