1// Protocol Buffers for Go with Gadgets 2// 3// Copyright (c) 2015, The GoGo Authors. rights reserved. 4// http://github.com/gogo/protobuf 5// 6// Redistribution and use in source and binary forms, with or without 7// modification, are permitted provided that the following conditions are 8// met: 9// 10// * Redistributions of source code must retain the above copyright 11// notice, this list of conditions and the following disclaimer. 12// * Redistributions in binary form must reproduce the above 13// copyright notice, this list of conditions and the following disclaimer 14// in the documentation and/or other materials provided with the 15// distribution. 16// 17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 29package vanity 30 31import ( 32 "github.com/gogo/protobuf/gogoproto" 33 "github.com/gogo/protobuf/proto" 34 descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" 35) 36 37func MessageHasBoolExtension(msg *descriptor.DescriptorProto, extension *proto.ExtensionDesc) bool { 38 if msg.Options == nil { 39 return false 40 } 41 value, err := proto.GetExtension(msg.Options, extension) 42 if err != nil { 43 return false 44 } 45 if value == nil { 46 return false 47 } 48 if value.(*bool) == nil { 49 return false 50 } 51 return true 52} 53 54func SetBoolMessageOption(extension *proto.ExtensionDesc, value bool) func(msg *descriptor.DescriptorProto) { 55 return func(msg *descriptor.DescriptorProto) { 56 if MessageHasBoolExtension(msg, extension) { 57 return 58 } 59 if msg.Options == nil { 60 msg.Options = &descriptor.MessageOptions{} 61 } 62 if err := proto.SetExtension(msg.Options, extension, &value); err != nil { 63 panic(err) 64 } 65 } 66} 67 68func TurnOffGoGetters(msg *descriptor.DescriptorProto) { 69 SetBoolMessageOption(gogoproto.E_GoprotoGetters, false)(msg) 70} 71 72func TurnOffGoStringer(msg *descriptor.DescriptorProto) { 73 SetBoolMessageOption(gogoproto.E_GoprotoStringer, false)(msg) 74} 75 76func TurnOnVerboseEqual(msg *descriptor.DescriptorProto) { 77 SetBoolMessageOption(gogoproto.E_VerboseEqual, true)(msg) 78} 79 80func TurnOnFace(msg *descriptor.DescriptorProto) { 81 SetBoolMessageOption(gogoproto.E_Face, true)(msg) 82} 83 84func TurnOnGoString(msg *descriptor.DescriptorProto) { 85 SetBoolMessageOption(gogoproto.E_Face, true)(msg) 86} 87 88func TurnOnPopulate(msg *descriptor.DescriptorProto) { 89 SetBoolMessageOption(gogoproto.E_Populate, true)(msg) 90} 91 92func TurnOnStringer(msg *descriptor.DescriptorProto) { 93 SetBoolMessageOption(gogoproto.E_Stringer, true)(msg) 94} 95 96func TurnOnEqual(msg *descriptor.DescriptorProto) { 97 SetBoolMessageOption(gogoproto.E_Equal, true)(msg) 98} 99 100func TurnOnDescription(msg *descriptor.DescriptorProto) { 101 SetBoolMessageOption(gogoproto.E_Description, true)(msg) 102} 103 104func TurnOnTestGen(msg *descriptor.DescriptorProto) { 105 SetBoolMessageOption(gogoproto.E_Testgen, true)(msg) 106} 107 108func TurnOnBenchGen(msg *descriptor.DescriptorProto) { 109 SetBoolMessageOption(gogoproto.E_Benchgen, true)(msg) 110} 111 112func TurnOnMarshaler(msg *descriptor.DescriptorProto) { 113 SetBoolMessageOption(gogoproto.E_Marshaler, true)(msg) 114} 115 116func TurnOnUnmarshaler(msg *descriptor.DescriptorProto) { 117 SetBoolMessageOption(gogoproto.E_Unmarshaler, true)(msg) 118} 119 120func TurnOnSizer(msg *descriptor.DescriptorProto) { 121 SetBoolMessageOption(gogoproto.E_Sizer, true)(msg) 122} 123 124func TurnOnUnsafeUnmarshaler(msg *descriptor.DescriptorProto) { 125 SetBoolMessageOption(gogoproto.E_UnsafeUnmarshaler, true)(msg) 126} 127 128func TurnOnUnsafeMarshaler(msg *descriptor.DescriptorProto) { 129 SetBoolMessageOption(gogoproto.E_UnsafeMarshaler, true)(msg) 130} 131 132func TurnOffGoExtensionsMap(msg *descriptor.DescriptorProto) { 133 SetBoolMessageOption(gogoproto.E_GoprotoExtensionsMap, false)(msg) 134} 135 136func TurnOffGoUnrecognized(msg *descriptor.DescriptorProto) { 137 SetBoolMessageOption(gogoproto.E_GoprotoUnrecognized, false)(msg) 138} 139 140func TurnOffGoUnkeyed(msg *descriptor.DescriptorProto) { 141 SetBoolMessageOption(gogoproto.E_GoprotoUnkeyed, false)(msg) 142} 143 144func TurnOffGoSizecache(msg *descriptor.DescriptorProto) { 145 SetBoolMessageOption(gogoproto.E_GoprotoSizecache, false)(msg) 146} 147 148func TurnOnCompare(msg *descriptor.DescriptorProto) { 149 SetBoolMessageOption(gogoproto.E_Compare, true)(msg) 150} 151 152func TurnOnMessageName(msg *descriptor.DescriptorProto) { 153 SetBoolMessageOption(gogoproto.E_Messagename, true)(msg) 154} 155