package Net::FSP::Entry;
use strict;
use warnings;
use Carp;

use overload q{""} => sub {
	return $_[0]->short_name;

sub new {
	my ($class, $fsp, $name, %attributes) = @_;
	$name =~ s{ \A / }{}mx;
	return bless {
		fsp  => $fsp,
		name => $name,
	}, $class;

for my $subname (qw/name type size time link/) {
	no strict 'refs';    ##no critic strict
	*{$subname} = sub {
		return $_[0]{$subname};

sub move {
	my ($self, $new_name) = @_;
	$self->{fsp}->move_file($self->{name}, $new_name);

sub short_name {
	my $self = shift;
	$self->{name} =~ / ( [^\/]* ) \z /mx or croak "Couldn't determine short_name";
	return $1;

sub accept;
sub remove;
sub download;



=head1 NAME

Net::FSP::Entry - An FSP directory entry

=head1 VERSION

This documentation refers to Net::FSP version 0.13


In FSP there are two kinds of entries, files and directories. This is the
base class of the corresponding types: Net::FSP::File and Net::FSP::Dir.

=head1 METHODS

=over 4

=item name()

Returns the full name of the entry.

=item short_name

Returns the basename of the entry.

=item type()

Returns I<file> or I<dir>, depending on the type of entry.

=item move($new_location)

Move this entry to a new location.

=item remove()

Remove this entry.

=item download($sink = $self->name)

Download this entry.

=item size()

Returns the size (in bytes) of the entry.

=item time()

Returns the modification time of the entry (in seconds since UNIX epoch).

=item link()

Returns the location the symlink is pointing to, or undef if the entry is not a

=item accept($visitor)

Accept a visitor. This visitor must be a subref.


=head1 AUTHOR

Leon Timmermans,


Copyright (c) 2005, 2008 Leon Timmermans. All rights reserved.

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

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS

=begin ignore

=over 4

=item new