The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
package Data::UUID::Base64URLSafe;
use strict;
use warnings;
use MIME::Base64::URLSafe;
use base qw(Data::UUID);
our @EXPORT  = @{Data::UUID::EXPORT};
our $VERSION = '0.34';

sub new {
    my $class = shift;
    my $self  = $class->SUPER::new(@_);
    bless $self, $class;
    return $self;
}

sub create_b64_urlsafe {
    my $self = shift;
    return urlsafe_b64encode( $self->create );
}

sub create_from_name_b64_urlsafe {
    my $self = shift;
    return urlsafe_b64encode( $self->create_from_name(@_) );
}

sub to_b64_urlsafe {
    my $self = shift;
    my $uuid = shift;
    return urlsafe_b64encode($uuid);
}

sub from_b64_urlsafe {
    my $self = shift;
    my $uuid = shift;
    return urlsafe_b64decode($uuid);
}

1;

__END__

=head1 NAME

Data::UUID::Base64URLSafe - URL-safe UUIDs

=head1 SYNOPSIS

  use Data::UUID::Base64URLSafe;
  my $ug = Data::UUID::Base64URLSafe->new;
  my $uuid = $ug->create_b64_urlsafe;

=head1 DESCRIPTION

L<Data::UUID> creates wonderful Globally/Universally Unique
Identifiers (GUIDs/UUIDs). This module is a subclass of that
module which adds a method to get a URL-safe Base64-encoded
version of the UUID using L<MIME::Base64::URLSafe>. What that
means is that you can get a 22-character UUID string which
you can use safely in URLs.

=head1 METHODS

=head2 new

The constructor:

  my $ug = Data::UUID::Base64URLSafe->new;

=head2 create_b64_urlsafe

Create a URL-safe Base64-encoded UUID:

  my $uuid = $ug->create_b64_urlsafe;

=head2 create_from_name_b64_urlsafe

Creates a URL-safe Base64 encoded UUID with the namespace and data 
specified (See the L<Data::UUID> docs on create_from_name

=head2 from_b64_urlsafe

   my $uuid2 = $ug−>create_from_name_b64_urlsafe(<namespace>, <name>);


=head2 to_b64_urlsafe

Convert a binary UUID to a URL-safe Base64 encoded UUID

=head2 from_b64_urlsafe

Convert a Base 64-encoded URL-safe UUID to its canonical binary representation


=head1 AUTHOR

Leon Brocard, C<< <acme@astray.com> >>

=head1 COPYRIGHT

Copyright (C) 2008, Leon Brocard

=head1 LICENSE

This module is free software; you can redistribute it or modify it
under the same terms as Perl itself.