root/third_party/libaddressinput/chromium/cpp/include/libaddressinput/address_problem.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// Copyright (C) 2013 Google Inc.
//
// 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.

#ifndef I18N_ADDRESSINPUT_ADDRESS_PROBLEM_H_
#define I18N_ADDRESSINPUT_ADDRESS_PROBLEM_H_

#include <libaddressinput/address_field.h>

#include <iosfwd>

namespace i18n {
namespace addressinput {

// A problem for address validation.
struct AddressProblem {
  // Types of problems encountered in address validation.
  enum Type {
    // The field is empty or whitespace, but it is required for addresses in
    // this country.
    //
    // For example, in the US, administrative area is a required field.
    MISSING_REQUIRED_FIELD,

    // A list of values for the field is defined, but the value does not occur
    // in the list. Applies to hierarchical elements like country code,
    // administrative area, locality, and dependent locality.
    //
    // For example, in the US, the values for for administrative area include
    // "CA", but not "XX".
    UNKNOWN_VALUE,

    // A format for the field is defined, but the value does not match. This is
    // used to match postal code against the general format pattern. Formats
    // indicate how many digits/letters should be present and what punctuation
    // is allowed.
    //
    // For example, in the US, postal codes are five digits with an optional
    // hyphen followed by four digits.
    UNRECOGNIZED_FORMAT,

    // A specific pattern for the field is defined based on a specific
    // sub-region (an administrative area for example), but the value does not
    // match. This is used to match postal code against a regular expression.
    //
    // For example, in the US, postal codes in the state of California start
    // with a '9'.
    MISMATCHING_VALUE
  };

  AddressProblem(AddressField field, Type type, int description_id);
  ~AddressProblem();

  // The address field that has the problem.
  AddressField field;

  // The type of problem.
  Type type;

  // The ID for the string that is the human readable description of the
  // problem.
  int description_id;
};

// Produces human-readable output in logging, for example in unit tests.
// Produces what you would expect for valid values, e.g.
// "MISSING_REQUIRED_FIELD" for MISSING_REQUIRED_FIELD. For invalid values,
// produces "[INVALID]".
std::ostream& operator<<(std::ostream& o, AddressProblem::Type problem_type);

// Produces human-readable output in logging, for example in unit tests.
// Example: [ADMIN_AREA, UNKNOWN_VALUE, "Invalid state"].
std::ostream& operator<<(std::ostream& o, const AddressProblem& problem);

}  // namespace addressinput
}  // namespace i18n

#endif  // I18N_ADDRESSINPUT_ADDRESS_PROBLEM_H_

/* [<][>][^][v][top][bottom][index][help] */