#!/usr/bin/perl -w
# 
# $Id: Null.pm,v 1.1.1.1 2003/10/28 16:04:37 andy Exp $
# 
# This code is copyright 1999-2000 by Scott Guelich <scott@scripted.com>
# and is distributed according to the same conditions as Perl itself
# Please visit http://www.scripted.com/wddx/ for more information
#

package WDDX::Null;

# Auto-inserted by build scripts
$VERSION = "1.01";

use strict;
use Carp;

require WDDX;

{ my $i_hate_the_w_flag_sometimes = [
    $WDDX::PACKET_HEADER,
    $WDDX::PACKET_FOOTER,
    $WDDX::Null::VERSION
] }

1;


#/-----------------------------------------------------------------------
# Public Methods
# 

sub new {
    return bless { value => undef }, shift;
}


sub type {
    return "null";
}


sub as_packet {
    my( $self ) = @_;
    my $output = $WDDX::PACKET_HEADER .
                 $self->_serialize .
                 $WDDX::PACKET_FOOTER;
}


sub as_scalar {
    my( $self ) = @_;
    return $self->_deserialize;
}


sub as_javascript {
    my( $self, $js_var ) = @_;
    return "$js_var=null;";
}


#/-----------------------------------------------------------------------
# Private Methods
# 

sub is_parser {
    return 0;
}


sub _serialize {
    return "<null/>";
}


sub _deserialize {
    return undef;
}


#/-----------------------------------------------------------------------
# Parsing Code
# 

package WDDX::Null::Parser;


sub new {
    return bless { value => undef }, shift;
}


sub start_tag {
    my( $self, $element, $attribs ) = @_;
    
    die "<$element> not allowed within <null> element\n" unless $element eq "null";
    return $self;
}


sub end_tag {
    my( $self, $element ) = @_;
    
    if ( $element eq "null" ) {
        $self = new WDDX::Null();
    }
    else {
        die "</$element> not allowed within <null> element\n";
    }
    return $self;
}


sub append_data {
    my( $self, $data ) = @_;
    die "No data is allowed between <null> tags\n" if $data =~ /\S/;
}


sub is_parser {
    return 1;
}