# Copyright (C) 2021 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import argparse import classpaths_pb2 import google.protobuf.json_format as json_format import google.protobuf.text_format as text_format def encode(args): pb = classpaths_pb2.ExportedClasspathsJars() if args.format == 'json': json_format.Parse(args.input.read(), pb) else: text_format.Parse(args.input.read(), pb) args.output.write(pb.SerializeToString()) args.input.close() args.output.close() def decode(args): pb = classpaths_pb2.ExportedClasspathsJars() pb.ParseFromString(args.input.read()) if args.format == 'json': args.output.write(json_format.MessageToJson(pb)) else: args.output.write(text_format.MessageToString(pb).encode('utf_8')) args.input.close() args.output.close() def main(): parser = argparse.ArgumentParser('Convert classpaths.proto messages between binary and ' 'human-readable formats.') parser.add_argument('-f', '--format', default='textproto', help='human-readable format, either json or text(proto), ' 'defaults to textproto') parser.add_argument('-i', '--input', nargs='?', type=argparse.FileType('rb'), default=sys.stdin.buffer) parser.add_argument('-o', '--output', nargs='?', type=argparse.FileType('wb'), default=sys.stdout.buffer) subparsers = parser.add_subparsers() parser_encode = subparsers.add_parser('encode', help='convert classpaths protobuf message from ' 'JSON to binary format', parents=[parser], add_help=False) parser_encode.set_defaults(func=encode) parser_decode = subparsers.add_parser('decode', help='print classpaths config in JSON format', parents=[parser], add_help=False) parser_decode.set_defaults(func=decode) args = parser.parse_args() args.func(args) if __name__ == '__main__': main()