The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package WWW::Getsy::Types;

use MooseX::Types -declare => [qw(
    EnvVar 
    EnvConsumerKey 
    EnvConsumerSecret 
    RequestParams
    RequestMethod 
    )];
use MooseX::Types::Moose qw/Str HashRef/;
use JSON::XS;
use MooseX::Getopt::OptionTypeMap;

subtype EnvVar,
    as Str,
    where { grep {defined && length} $_ };

subtype EnvConsumerKey,
    as EnvVar,
    message { "Please set OAUTH_CONSUMER_KEY" };

subtype EnvConsumerSecret,
    as EnvVar,
    message { "Please set OAUTH_CONSUMER_SECRET" };

subtype RequestParams,
    as HashRef;

MooseX::Getopt::OptionTypeMap->add_option_type_to_map(
    RequestParams , '=s'
    );

coerce RequestParams,
    from Str,
    via {
        decode_json($_);
    };

enum RequestMethod , qw(get put post delete);

coerce RequestMethod,
    from Str,
    via {
        lc $_;
    };