1ffe3c632Sopenharmony_ci<?php 2ffe3c632Sopenharmony_ci 3ffe3c632Sopenharmony_ci// Protocol Buffers - Google's data interchange format 4ffe3c632Sopenharmony_ci// Copyright 2008 Google Inc. All rights reserved. 5ffe3c632Sopenharmony_ci// https://developers.google.com/protocol-buffers/ 6ffe3c632Sopenharmony_ci// 7ffe3c632Sopenharmony_ci// Redistribution and use in source and binary forms, with or without 8ffe3c632Sopenharmony_ci// modification, are permitted provided that the following conditions are 9ffe3c632Sopenharmony_ci// met: 10ffe3c632Sopenharmony_ci// 11ffe3c632Sopenharmony_ci// * Redistributions of source code must retain the above copyright 12ffe3c632Sopenharmony_ci// notice, this list of conditions and the following disclaimer. 13ffe3c632Sopenharmony_ci// * Redistributions in binary form must reproduce the above 14ffe3c632Sopenharmony_ci// copyright notice, this list of conditions and the following disclaimer 15ffe3c632Sopenharmony_ci// in the documentation and/or other materials provided with the 16ffe3c632Sopenharmony_ci// distribution. 17ffe3c632Sopenharmony_ci// * Neither the name of Google Inc. nor the names of its 18ffe3c632Sopenharmony_ci// contributors may be used to endorse or promote products derived from 19ffe3c632Sopenharmony_ci// this software without specific prior written permission. 20ffe3c632Sopenharmony_ci// 21ffe3c632Sopenharmony_ci// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22ffe3c632Sopenharmony_ci// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23ffe3c632Sopenharmony_ci// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24ffe3c632Sopenharmony_ci// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25ffe3c632Sopenharmony_ci// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26ffe3c632Sopenharmony_ci// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27ffe3c632Sopenharmony_ci// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28ffe3c632Sopenharmony_ci// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29ffe3c632Sopenharmony_ci// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30ffe3c632Sopenharmony_ci// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31ffe3c632Sopenharmony_ci// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32ffe3c632Sopenharmony_ci 33ffe3c632Sopenharmony_cinamespace Google\Protobuf\Internal; 34ffe3c632Sopenharmony_ci 35ffe3c632Sopenharmony_ciuse Google\Protobuf\Internal\GPBLabel; 36ffe3c632Sopenharmony_ciuse Google\Protobuf\Internal\GPBType; 37ffe3c632Sopenharmony_ciuse Google\Protobuf\Internal\Descriptor; 38ffe3c632Sopenharmony_ciuse Google\Protobuf\Internal\FieldDescriptor; 39ffe3c632Sopenharmony_ci 40ffe3c632Sopenharmony_ciclass MessageBuilderContext 41ffe3c632Sopenharmony_ci{ 42ffe3c632Sopenharmony_ci 43ffe3c632Sopenharmony_ci private $descriptor; 44ffe3c632Sopenharmony_ci private $pool; 45ffe3c632Sopenharmony_ci 46ffe3c632Sopenharmony_ci public function __construct($full_name, $klass, $pool) 47ffe3c632Sopenharmony_ci { 48ffe3c632Sopenharmony_ci $this->descriptor = new Descriptor(); 49ffe3c632Sopenharmony_ci $this->descriptor->setFullName($full_name); 50ffe3c632Sopenharmony_ci $this->descriptor->setClass($klass); 51ffe3c632Sopenharmony_ci $this->pool = $pool; 52ffe3c632Sopenharmony_ci } 53ffe3c632Sopenharmony_ci 54ffe3c632Sopenharmony_ci private function getFieldDescriptor($name, $label, $type, 55ffe3c632Sopenharmony_ci $number, $type_name = null) 56ffe3c632Sopenharmony_ci { 57ffe3c632Sopenharmony_ci $field = new FieldDescriptor(); 58ffe3c632Sopenharmony_ci $field->setName($name); 59ffe3c632Sopenharmony_ci $camel_name = implode('', array_map('ucwords', explode('_', $name))); 60ffe3c632Sopenharmony_ci $field->setGetter('get' . $camel_name); 61ffe3c632Sopenharmony_ci $field->setSetter('set' . $camel_name); 62ffe3c632Sopenharmony_ci $field->setType($type); 63ffe3c632Sopenharmony_ci $field->setNumber($number); 64ffe3c632Sopenharmony_ci $field->setLabel($label); 65ffe3c632Sopenharmony_ci 66ffe3c632Sopenharmony_ci // At this time, the message/enum type may have not been added to pool. 67ffe3c632Sopenharmony_ci // So we use the type name as place holder and will replace it with the 68ffe3c632Sopenharmony_ci // actual descriptor in cross building. 69ffe3c632Sopenharmony_ci switch ($type) { 70ffe3c632Sopenharmony_ci case GPBType::MESSAGE: 71ffe3c632Sopenharmony_ci $field->setMessageType($type_name); 72ffe3c632Sopenharmony_ci break; 73ffe3c632Sopenharmony_ci case GPBType::ENUM: 74ffe3c632Sopenharmony_ci $field->setEnumType($type_name); 75ffe3c632Sopenharmony_ci break; 76ffe3c632Sopenharmony_ci default: 77ffe3c632Sopenharmony_ci break; 78ffe3c632Sopenharmony_ci } 79ffe3c632Sopenharmony_ci 80ffe3c632Sopenharmony_ci return $field; 81ffe3c632Sopenharmony_ci } 82ffe3c632Sopenharmony_ci 83ffe3c632Sopenharmony_ci public function optional($name, $type, $number, $type_name = null) 84ffe3c632Sopenharmony_ci { 85ffe3c632Sopenharmony_ci $this->descriptor->addField($this->getFieldDescriptor( 86ffe3c632Sopenharmony_ci $name, 87ffe3c632Sopenharmony_ci GPBLabel::OPTIONAL, 88ffe3c632Sopenharmony_ci $type, 89ffe3c632Sopenharmony_ci $number, 90ffe3c632Sopenharmony_ci $type_name)); 91ffe3c632Sopenharmony_ci return $this; 92ffe3c632Sopenharmony_ci } 93ffe3c632Sopenharmony_ci 94ffe3c632Sopenharmony_ci public function repeated($name, $type, $number, $type_name = null) 95ffe3c632Sopenharmony_ci { 96ffe3c632Sopenharmony_ci $this->descriptor->addField($this->getFieldDescriptor( 97ffe3c632Sopenharmony_ci $name, 98ffe3c632Sopenharmony_ci GPBLabel::REPEATED, 99ffe3c632Sopenharmony_ci $type, 100ffe3c632Sopenharmony_ci $number, 101ffe3c632Sopenharmony_ci $type_name)); 102ffe3c632Sopenharmony_ci return $this; 103ffe3c632Sopenharmony_ci } 104ffe3c632Sopenharmony_ci 105ffe3c632Sopenharmony_ci public function required($name, $type, $number, $type_name = null) 106ffe3c632Sopenharmony_ci { 107ffe3c632Sopenharmony_ci $this->descriptor->addField($this->getFieldDescriptor( 108ffe3c632Sopenharmony_ci $name, 109ffe3c632Sopenharmony_ci GPBLabel::REQUIRED, 110ffe3c632Sopenharmony_ci $type, 111ffe3c632Sopenharmony_ci $number, 112ffe3c632Sopenharmony_ci $type_name)); 113ffe3c632Sopenharmony_ci return $this; 114ffe3c632Sopenharmony_ci } 115ffe3c632Sopenharmony_ci 116ffe3c632Sopenharmony_ci public function finalizeToPool() 117ffe3c632Sopenharmony_ci { 118ffe3c632Sopenharmony_ci $this->pool->addDescriptor($this->descriptor); 119ffe3c632Sopenharmony_ci } 120ffe3c632Sopenharmony_ci} 121