diff options
author | Dylan William Hardison <dylan@hardison.net> | 2018-10-13 06:32:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-13 06:32:57 +0200 |
commit | 5688d0e712b85bc892ce405a1b79e3571f6d6d0f (patch) | |
tree | 39277970bd3648781fbecd1ebdcc9b3d6693d4b9 /Bugzilla/WebService/JSON | |
parent | 9263b7453169816c23b6f307fd225f3676d57a3a (diff) | |
download | bugzilla-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')
-rw-r--r-- | Bugzilla/WebService/JSON/Box.pm | 43 |
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; |