package Geo::Coder::Many::Generic;

use strict;
use warnings;
use Carp;

use Geo::Coder::Many::Response;

our $VERSION = '0.01';

=head1 NAME

Geo::Coder::Many::Generic - Base plugin class


Base class for Geo::Coder::Many::* (Geo::Coder wrapper) classes

=head1 METHODS

=head2 new

Construct and return a new instance of the class.
Arguments should be provided in a hash with keys 'geocoder' and 'daily_limit'.


sub new {
    my $class = shift;
    my $args = shift;

    my $self = {
        GeoCoder    => $args->{geocoder},
        daily_limit => $args->{daily_limit},

    bless $self, $class;

    return $self;

=head2 geocode

The main geocode method, to be overridden by subclasses. Should take a location
string, geocode it using the wrapped class, and return the results (converted
to a standard format)


sub geocode {
    croak "This method must be over-ridden";

=head2 get_daily_limit

Getter for daily_limit.


sub get_daily_limit {
    return shift->{daily_limit};

=head2 get_name

Return the short name of the geocoder being wrapped (should be overriden by the


sub get_name {
    croak "This method must be over-ridden";