19693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// Copyright (C) 2014 Google Inc. 29693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// 39693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// Licensed under the Apache License, Version 2.0 (the "License"); 49693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// you may not use this file except in compliance with the License. 59693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// You may obtain a copy of the License at 69693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// 79693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// http://www.apache.org/licenses/LICENSE-2.0 89693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// 99693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// Unless required by applicable law or agreed to in writing, software 109693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// distributed under the License is distributed on an "AS IS" BASIS, 119693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 129693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// See the License for the specific language governing permissions and 139693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// limitations under the License. 149693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com 159693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com#ifndef I18N_ADDRESSINPUT_SUPPLIER_H_ 169693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com#define I18N_ADDRESSINPUT_SUPPLIER_H_ 179693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com 189693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com#include <libaddressinput/callback.h> 199693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com 209693f6426f3500db74dcfc766a130a747a571e5eroubert@google.comnamespace i18n { 219693f6426f3500db74dcfc766a130a747a571e5eroubert@google.comnamespace addressinput { 229693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com 239693f6426f3500db74dcfc766a130a747a571e5eroubert@google.comclass LookupKey; 249693f6426f3500db74dcfc766a130a747a571e5eroubert@google.comclass Rule; 259693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com 269693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// Interface for objects that are able to supply the AddressValidator with the 279693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com// metadata needed to validate an address, as described by a LookupKey. 289693f6426f3500db74dcfc766a130a747a571e5eroubert@google.comclass Supplier { 299693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com public: 3050cb90bfdd0ef201b5d4114f2204444db10bcc82rouslan@chromium.org struct RuleHierarchy; 318c9b0e35847b85f4cc7434058e4e4ec5d5560c40roubert@google.com typedef i18n::addressinput::Callback<const LookupKey&, 328c9b0e35847b85f4cc7434058e4e4ec5d5560c40roubert@google.com const RuleHierarchy&> Callback; 339693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com 349693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com virtual ~Supplier() {} 359693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com 369693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com // Aggregates the metadata needed for |lookup_key| into a RuleHierarchy 379693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com // object, then calls |supplied|. Implementations of this interface may 389693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com // either load the necessary data on demand, or fail if the necessary data 399693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com // hasn't already been loaded. 409693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com virtual void Supply(const LookupKey& lookup_key, 419693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com const Callback& supplied) = 0; 429693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com 439693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com // A RuleHierarchy object encapsulates the hierarchical list of Rule objects 449693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com // that corresponds to a particular LookupKey. 4517471f7b69a94f92480650b06721e698204be3c0roubert@google.com struct RuleHierarchy { 4617471f7b69a94f92480650b06721e698204be3c0roubert@google.com RuleHierarchy() : rule() {} 4717471f7b69a94f92480650b06721e698204be3c0roubert@google.com const Rule* rule[4]; // Cf. LookupKey::kHierarchy. 489693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com }; 499693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com}; 509693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com 519693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com} // namespace addressinput 529693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com} // namespace i18n 539693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com 549693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com#endif // I18N_ADDRESSINPUT_SUPPLIER_H_ 55