NAME

    Object::Pad::ClassAttr::Struct - declare an Object::Pad class to be
    struct-like

SYNOPSIS

       use Object::Pad;
       use Object::Pad::ClassAttr::Struct;
    
       class Colour :Struct {
          # These get :param :mutator automatically
          field $red   = 0;
          field $green = 0;
          field $blue  = 0;
    
          # Additional methods are still permitted
          method lightness {
             return ($red + $green + $blue) / 3;
          }
       }
    
       my $cyan = Colour->new( green => 1, blue => 1 );
    
       # A positional constructor is created automatically
       my $white = Colour->new_values(1, 1, 1);

DESCRIPTION

    This module provides a third-party class attribute for
    Object::Pad-based classes, which applies some attributes automatically
    to every field added to the class, as a convenient shortcut for making
    structure-like classes.

CLASS ATTRIBUTES

 :Struct

       class Name :Struct ... { ... }

    Automatically applies the :param and :mutator attributes to every field
    defined on the class, meaning the constructor will accept parameters
    for each field to initialise the value, and each field will have an
    lvalue mutator method.

    In addition, the class itself gains the :strict(params) attribute,
    meaning the constructor will check parameter names and throw an
    exception for unrecognised names.

    Since version 0.04 a positional constructor class method called
    new_values is also provided into the class, which takes a value for
    every field positionally, in declared order.

       $obj = ClassName->new_values($v1, $v2, $v3, ...);

    This positional constructor must receive as many positional arguments
    as there are fields in total in the class; even the optional ones. All
    arguments are required here.

    Since version 0.05 the following options are permitted inside the
    attribute value parentheses:

  :Struct(readonly)

    Instances of this class do not permit fields to be modified after
    construction. The accessor is created using the :reader field attribute
    rather than :mutator.

AUTHOR

    Paul Evans <leonerd@leonerd.org.uk>