package SPVM::BlessedObject::String;

use strict;
use warnings;

use Carp 'confess';

use base 'SPVM::BlessedObject';

use overload bool => sub {1}, '""' => sub { shift->to_string }, fallback => 1;

use SPVM::ExchangeAPI;

sub to_string {
  my $self = shift;
  
  my $string = $self->to_bin;
  
  my $success = utf8::decode($string);
  
  unless ($success) {
    confess("The SPVM::BlessedObject::String object cannnot be decoded to Perl string");
  }
  
  return $string;
}

sub to_bin { my $ret; eval { $ret =  shift->_xs_to_bin(@_) }; if ($@) { confess($@) } $ret; }

1;

=head1 Name

SPVM::BlessedObject::String - SPVM string

=head1 Description

The object of C<SPVM::BlessedObject::String> class holds an SPVM string.

=head1 Usage

  my $string = $blessed_object_string->to_string;
  
  my $binary = $blessed_object_string->to_bin;

=head1 Instance Methods

=head2 to_string

  my $string = $blessed_object_string->to_string;

Returns a string decoded to Perl string using L<utf8::decode|https://metacpan.org/pod/utf8>.

If the docoding fails, an exception is thrown.

=head2 to_bin

  my $binary = $blessed_object_string->to_bin;

Returns a string as a binary.

=head1 Operators

Overloads the following operators.

=head2 bool

  my $bool = !!$blessed_object_string;

Always true.

=head2 stringify

  my $string = "$blessed_object_string";

The alias for L</"to_string">.

=head1 Copyright & License

Copyright (c) 2023 Yuki Kimoto

MIT License