18bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// Copyright (C) 2013 Google Inc. 28bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// 38bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// Licensed under the Apache License, Version 2.0 (the "License"); 48bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// you may not use this file except in compliance with the License. 58bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// You may obtain a copy of the License at 68bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// 78bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// http://www.apache.org/licenses/LICENSE-2.0 88bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// 98bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// Unless required by applicable law or agreed to in writing, software 108bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// distributed under the License is distributed on an "AS IS" BASIS, 118bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 128bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// See the License for the specific language governing permissions and 138bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// limitations under the License. 148bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// 158bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// An object to retrieve validation rules. 168bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 178bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org#ifndef I18N_ADDRESSINPUT_RULE_RETRIEVER_H_ 188bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org#define I18N_ADDRESSINPUT_RULE_RETRIEVER_H_ 198bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 208bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org#include <libaddressinput/callback.h> 218bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org#include <libaddressinput/util/basictypes.h> 228bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org#include <libaddressinput/util/scoped_ptr.h> 238bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 248bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org#include <string> 258bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 268bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.orgnamespace i18n { 278bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.orgnamespace addressinput { 288bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 298bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.orgclass Retriever; 308bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.orgclass Rule; 318bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 328bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// Retrieves validation rules. Sample usage: 338bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// const Retriever* retriever = ... 348bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// RuleRetriever rules(retriever); 35e543c57d2256e9f144bbfc3783cc30a5d2129eaeroubert@google.com// const scoped_ptr<const RuleRetriever::Callback> rule_ready( 36e543c57d2256e9f144bbfc3783cc30a5d2129eaeroubert@google.com// BuildCallback(this, &MyClass::OnRuleReady)); 378bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// rules.RetrieveRule("data/CA/AB--fr", *rule_ready); 388bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.orgclass RuleRetriever { 398bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org public: 408c9b0e35847b85f4cc7434058e4e4ec5d5560c40roubert@google.com typedef i18n::addressinput::Callback<const std::string&, 418c9b0e35847b85f4cc7434058e4e4ec5d5560c40roubert@google.com const Rule&> Callback; 428bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 438bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org // Takes ownership of |retriever|. 448bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org explicit RuleRetriever(const Retriever* retriever); 458bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org ~RuleRetriever(); 468bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 478bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org // Retrieves the rule for |key| and invokes the |rule_ready| callback. 488bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org void RetrieveRule(const std::string& key, const Callback& rule_ready) const; 498bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 508bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org private: 518bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org scoped_ptr<const Retriever> data_retriever_; 528bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 538bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org DISALLOW_COPY_AND_ASSIGN(RuleRetriever); 548bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org}; 558bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 568bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org} // namespace addressinput 578bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org} // namespace i18n 588bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 598bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org#endif // I18N_ADDRESSINPUT_RULE_RETRIEVER_H_ 60