# Copyright (C) all contributors # License: AGPL-3.0+ package PublicInbox::Address; use v5.12; use parent qw(Exporter); our @EXPORT_OK = qw(pairs); sub xs_emails { grep { defined } map { $_->address() } parse_email_addresses($_[0]) } sub xs_names { grep { defined } map { my $n = $_->name; my $addr = $_->address; $n = $_->user if defined($addr) && $n eq $addr; $n; } parse_email_addresses($_[0]); } sub xs_pairs { # for JMAP, RFC 8621 section 4.1.2.3 [ map { # LHS (name) may be undef if there's an address my @p = ($_->phrase // $_->comment, $_->address); # show original if totally bogus: $p[0] = $_->original unless defined $p[1]; \@p; } parse_email_addresses($_[0]) ]; } eval { require Email::Address::XS; Email::Address::XS->import(qw(parse_email_addresses)); *emails = \&xs_emails; *names = \&xs_names; *pairs = \&xs_pairs; *objects = sub { Email::Address::XS->parse(@_) }; }; if ($@) { require PublicInbox::AddressPP; *emails = \&PublicInbox::AddressPP::emails; *names = \&PublicInbox::AddressPP::names; *pairs = \&PublicInbox::AddressPP::pairs; *objects = \&PublicInbox::AddressPP::objects; } 1;