NAME

MooX::XSConstructor - glue between Moo and Class::XSConstructor

SYNOPSIS

package Foo;
use Moo;
use MooX::XSConstructor;

# do normal Moo stuff here

DESCRIPTION

MooX::XSConstructor will look at your class attributes, and see if it could be built using the simple constructor that Class::XSConstructor is able to provide.

If your class is too complicated, it is a no-op.

If your class is simple enough, you will hopefully get a faster constructor.

Things that are deemed too complicated if they appear in any attributes (even an inherited one):

  • Eager builders and defaults. (Lazy builders and defaults are fine.)

  • Type constraints. (Except Type::Tiny, which is fine.)

  • Type coercions.

  • Triggers.

  • Use of init_arg.

  • Use of weak_ref.

Also if your class has a BUILDARGS or FOREIGNBUIDARGS method, it will be too complicated. (The default BUILDARGS inherited from Moo::Object is fine.)

So what Moo features are okay?

Required versus optional attributes, Type::Tiny type constraints (but not coercions), reader/writer/predicate/clearer, lazy defaults/builders, and delegation (handles).

BUGS

Please report any bugs to http://rt.cpan.org/Dist/Display.html?Queue=MooX-XSConstructor.

SEE ALSO

Moo, Class::XSConstructor.

You may also be interested in Class::XSAccessor. Moo already includes all the glue to interface with that, so a MooX module like this one isn't necessary.

AUTHOR

Toby Inkster <tobyink@cpan.org>.

COPYRIGHT AND LICENCE

This software is copyright (c) 2018 by Toby Inkster.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

DISCLAIMER OF WARRANTIES

THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.