package LedgerSMB::RESTXML::Document::Base;
use strict;
use warnings;
use XML::Twig;
use LedgerSMB::Log;
use Carp;

sub handle_post { 
	my ($self, $args) = @_;

	return $args->{handler}->unsupported('the POST method is not implemented.');
}

sub handle_put { 
	my ($self, $args) = @_;
	return $self->{handler}->unsupported('the PUT method is not implemented.');
}

sub handle_delete {
	my ($self, $args) = @_;
	return $self->{handler}->unsupported('the DELETE method is not implemented.');
}

sub handle_get {
	my ($self, $args) = @_;

	return $self->{handler}->unsupported('the GET method is not implemented.');
}

=head3 hash_to_twig

Convinenve function to convert a hashref to a XML::Twig structure.

passed a hashref, required arguments:

hash - the hash to convert

name - the name of the root element.

optional arguments:

sort - by default, on set to 0 to disable.  toggles whether or not hash keys are sorted
in the resulting xml node created.  Disabling this may save some performance if converting a lot of
nodes at once.

=cut

sub hash_to_twig { 
	my ($self, $args) = @_;

	my $hash = $args->{hash} || croak "Need a hash to convert to use hash_to_twig";
	my $name = $args->{name} || croak "Need a root element name to use hash_to_twig";
	my @keyorder = keys %$hash;	
	
	@keyorder = sort @keyorder unless defined($args->{sort}) and $args->{sort} == 0;

	return XML::Twig::Elt->new($name,$args->{root_attr}||{}, map  {
		XML::Twig::Elt->new($_, {'#CDATA'=>1}, $hash->{$_})
	} @keyorder );
}

1;