summaryrefslogtreecommitdiffstats
path: root/Bugzilla/WebService/JSON/Box.pm
diff options
context:
space:
mode:
authorDylan William Hardison <dylan@hardison.net>2018-10-13 06:32:57 +0200
committerGitHub <noreply@github.com>2018-10-13 06:32:57 +0200
commit5688d0e712b85bc892ce405a1b79e3571f6d6d0f (patch)
tree39277970bd3648781fbecd1ebdcc9b3d6693d4b9 /Bugzilla/WebService/JSON/Box.pm
parent9263b7453169816c23b6f307fd225f3676d57a3a (diff)
downloadbugzilla-5688d0e712b85bc892ce405a1b79e3571f6d6d0f.tar.gz
bugzilla-5688d0e712b85bc892ce405a1b79e3571f6d6d0f.tar.xz
Bug 1495741 - memory issues: Avoid copying stuff in the webservice layer so much
Diffstat (limited to 'Bugzilla/WebService/JSON/Box.pm')
-rw-r--r--Bugzilla/WebService/JSON/Box.pm43
1 files changed, 43 insertions, 0 deletions
diff --git a/Bugzilla/WebService/JSON/Box.pm b/Bugzilla/WebService/JSON/Box.pm
new file mode 100644
index 000000000..fc39aeee8
--- /dev/null
+++ b/Bugzilla/WebService/JSON/Box.pm
@@ -0,0 +1,43 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This Source Code Form is "Incompatible With Secondary Licenses", as
+# defined by the Mozilla Public License, v. 2.0.
+
+package Bugzilla::WebService::JSON::Box;
+use 5.10.1;
+use Moo;
+
+use overload '${}' => 'value', '""' => 'to_string', fallback => 1;
+
+has 'value' => (is => 'ro', required => 1);
+has 'json' => (is => 'ro', required => 1);
+has 'label' => (is => 'lazy');
+has 'encode' => (init_arg => undef, is => 'lazy', predicate => 'is_encoded');
+
+sub TO_JSON {
+ my ($self) = @_;
+
+ return $self->to_string;
+}
+
+sub to_string {
+ my ($self) = @_;
+
+ return $self->is_encoded ? $self->encode : $self->label;
+}
+
+sub _build_encode {
+ my ($self) = @_;
+
+ return $self->json->_encode($self->value);
+}
+
+sub _build_label {
+ my ($self) = @_;
+
+ return "" . $self->value;
+}
+
+1;