=begin comment

Web API Swagger specification

No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)

OpenAPI spec version: 1.0

Generated by: https://github.com/swagger-api/swagger-codegen.git

=end comment

=cut

#
# NOTE: This class is auto generated by the swagger code generator program. 
# Do not edit the class manually.
# Ref: https://github.com/swagger-api/swagger-codegen
#
package AsposeCellsCloud::Object::FormatCondition;

require 5.6.0;
use strict;
use warnings;
use utf8;
use JSON qw(decode_json);
use Data::Dumper;
use Module::Runtime qw(use_module);
use Log::Any qw($log);
use Date::Parse;
use DateTime;

use AsposeCellsCloud::Object::AboveAverage;
use AsposeCellsCloud::Object::ColorScale;
use AsposeCellsCloud::Object::DataBar;
use AsposeCellsCloud::Object::IconSet;
use AsposeCellsCloud::Object::Link;
use AsposeCellsCloud::Object::LinkElement;
use AsposeCellsCloud::Object::Style;
use AsposeCellsCloud::Object::Top10;

use base ("Class::Accessor", "Class::Data::Inheritable");


#
#
#
# NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually.
# REF: https://github.com/swagger-api/swagger-codegen
#

=begin comment

Web API Swagger specification

No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)

OpenAPI spec version: 1.0

Generated by: https://github.com/swagger-api/swagger-codegen.git

=end comment

=cut

#
# NOTE: This class is auto generated by the swagger code generator program. 
# Do not edit the class manually.
# Ref: https://github.com/swagger-api/swagger-codegen
#
__PACKAGE__->mk_classdata('attribute_map' => {});
__PACKAGE__->mk_classdata('swagger_types' => {});
__PACKAGE__->mk_classdata('method_documentation' => {}); 
__PACKAGE__->mk_classdata('class_documentation' => {});

# new object
sub new { 
    my ($class, %args) = @_; 

	my $self = bless {}, $class;
	
	foreach my $attribute (keys %{$class->attribute_map}) {
		my $args_key = $class->attribute_map->{$attribute};
		$self->$attribute( $args{ $args_key } );
	}
	
	return $self;
}  

# return perl hash
sub to_hash {
    return decode_json(JSON->new->convert_blessed->encode( shift ));
}

# used by JSON for serialization
sub TO_JSON { 
    my $self = shift;
    my $_data = {};
    foreach my $_key (keys %{$self->attribute_map}) {
        if (defined $self->{$_key}) {
            $_data->{$self->attribute_map->{$_key}} = $self->{$_key};
        }
    }
    return $_data;
}

# from Perl hashref
sub from_hash {
    my ($self, $hash) = @_;

    # loop through attributes and use swagger_types to deserialize the data
    while ( my ($_key, $_type) = each %{$self->swagger_types} ) {
    	my $_json_attribute = $self->attribute_map->{$_key}; 
        if ($_type =~ /^array\[/i) { # array
            my $_subclass = substr($_type, 6, -1);
            my @_array = ();
            foreach my $_element (@{$hash->{$_json_attribute}}) {
                push @_array, $self->_deserialize($_subclass, $_element);
            }
            $self->{$_key} = \@_array;
        } elsif (exists $hash->{$_json_attribute}) { #hash(model), primitive, datetime
            $self->{$_key} = $self->_deserialize($_type, $hash->{$_json_attribute});
        } else {
        	$log->debugf("Warning: %s (%s) does not exist in input hash\n", $_key, $_json_attribute);
        }
    }
  
    return $self;
}

# deserialize non-array data
sub _deserialize {
    my ($self, $type, $data) = @_;
    $log->debugf("deserializing %s with %s",Dumper($data), $type);
        
    if ($type eq 'DateTime') {
        return DateTime->from_epoch(epoch => str2time($data));
    } elsif ( grep( /^$type$/, ('int', 'double', 'string', 'boolean'))) {
        return $data;
    } else { # hash(model)
        my $_instance = eval "AsposeCellsCloud::Object::$type->new()";
        return $_instance->from_hash($data);
    }
}



__PACKAGE__->class_documentation({description => '',
                                  class => 'FormatCondition',
                                  required => [], # TODO
}                                 );

__PACKAGE__->method_documentation({
    'link' => {
    	datatype => 'Link',
    	base_name => 'link',
    	description => '',
    	format => '',
    	read_only => '',
    		},
    'above_average' => {
    	datatype => 'AboveAverage',
    	base_name => 'AboveAverage',
    	description => '',
    	format => '',
    	read_only => '',
    		},
    'formula2' => {
    	datatype => 'string',
    	base_name => 'Formula2',
    	description => '',
    	format => '',
    	read_only => '',
    		},
    'style' => {
    	datatype => 'Style',
    	base_name => 'Style',
    	description => '',
    	format => '',
    	read_only => '',
    		},
    'formula1' => {
    	datatype => 'string',
    	base_name => 'Formula1',
    	description => '',
    	format => '',
    	read_only => '',
    		},
    'color_scale' => {
    	datatype => 'ColorScale',
    	base_name => 'ColorScale',
    	description => '',
    	format => '',
    	read_only => '',
    		},
    'data_bar' => {
    	datatype => 'DataBar',
    	base_name => 'DataBar',
    	description => '',
    	format => '',
    	read_only => '',
    		},
    'text' => {
    	datatype => 'string',
    	base_name => 'Text',
    	description => '',
    	format => '',
    	read_only => '',
    		},
    'stop_if_true' => {
    	datatype => 'boolean',
    	base_name => 'StopIfTrue',
    	description => 'True, no rules with lower priority may be applied over this rule, when this     rule evaluates to true.  Only applies for Excel 2007;',
    	format => '',
    	read_only => '',
    		},
    'priority' => {
    	datatype => 'int',
    	base_name => 'Priority',
    	description => 'The priority of this conditional formatting rule. This value is used to determine     which format should be evaluated and rendered. Lower numeric values are higher     priority than higher numeric values, where &#39;1&#39; is the highest priority.',
    	format => '',
    	read_only => '',
    		},
    'top10' => {
    	datatype => 'Top10',
    	base_name => 'Top10',
    	description => '',
    	format => '',
    	read_only => '',
    		},
    'operator' => {
    	datatype => 'string',
    	base_name => 'Operator',
    	description => '',
    	format => '',
    	read_only => '',
    		},
    'icon_set' => {
    	datatype => 'IconSet',
    	base_name => 'IconSet',
    	description => '',
    	format => '',
    	read_only => '',
    		},
    'type' => {
    	datatype => 'string',
    	base_name => 'Type',
    	description => 'Gets and sets whether the conditional format Type.             ',
    	format => '',
    	read_only => '',
    		},
    'time_period' => {
    	datatype => 'string',
    	base_name => 'TimePeriod',
    	description => '',
    	format => '',
    	read_only => '',
    		},
});

__PACKAGE__->swagger_types( {
    'link' => 'Link',
    'above_average' => 'AboveAverage',
    'formula2' => 'string',
    'style' => 'Style',
    'formula1' => 'string',
    'color_scale' => 'ColorScale',
    'data_bar' => 'DataBar',
    'text' => 'string',
    'stop_if_true' => 'boolean',
    'priority' => 'int',
    'top10' => 'Top10',
    'operator' => 'string',
    'icon_set' => 'IconSet',
    'type' => 'string',
    'time_period' => 'string'
} );

__PACKAGE__->attribute_map( {
    'link' => 'link',
    'above_average' => 'AboveAverage',
    'formula2' => 'Formula2',
    'style' => 'Style',
    'formula1' => 'Formula1',
    'color_scale' => 'ColorScale',
    'data_bar' => 'DataBar',
    'text' => 'Text',
    'stop_if_true' => 'StopIfTrue',
    'priority' => 'Priority',
    'top10' => 'Top10',
    'operator' => 'Operator',
    'icon_set' => 'IconSet',
    'type' => 'Type',
    'time_period' => 'TimePeriod'
} );

__PACKAGE__->mk_accessors(keys %{__PACKAGE__->attribute_map});


1;
