codekingpro/portable-devtools
114k
1# Protocol Buffers - Google's data interchange format2# Copyright 2008 Google Inc. All rights reserved.3#4# Use of this source code is governed by a BSD-style5# license that can be found in the LICENSE file or at6# https://developers.google.com/open-source/licenses/bsd7 8"""Contains the Any helper APIs."""9 10from typing import Optional, TypeVar11 12from google.protobuf import descriptor13from google.protobuf.message import Message14 15from google.protobuf.any_pb2 import Any16 17 18_MessageT = TypeVar('_MessageT', bound=Message)19 20 21def pack(22 msg: Message,23 type_url_prefix: Optional[str] = 'type.googleapis.com/',24 deterministic: Optional[bool] = None,25) -> Any:26 any_msg = Any()27 any_msg.Pack(28 msg=msg, type_url_prefix=type_url_prefix, deterministic=deterministic29 )30 return any_msg31 32 33def unpack(any_msg: Any, msg: Message) -> bool:34 return any_msg.Unpack(msg=msg)35 36 37def unpack_as(any_msg: Any, message_type: type[_MessageT]) -> _MessageT:38 unpacked = message_type()39 if unpack(any_msg, unpacked):40 return unpacked41 else:42 raise TypeError(43 f'Attempted to unpack {type_name(any_msg)} to'44 f' {message_type.__qualname__}'45 )46 47 48def type_name(any_msg: Any) -> str:49 return any_msg.TypeName()50 51 52def is_type(any_msg: Any, des: descriptor.Descriptor) -> bool:53 return any_msg.Is(des)54 