def method_arguments_opaque_decode(buf: bytes) -> List[MethodArgument]: args = list() method_args_reader = StreamReader(buf) while not method_args_reader.done_reading(): arg = StreamReader(method_args_reader.read_bytes()) name = arg.read_bytes() # not using the arg name arg_type = arg.read_uint16() if arg_type == 0: val = arg.read_uint32() args.append(Uint32Arg(val)) elif arg_type == 1: val = arg.read_uint64() args.append(Uint64Arg(val)) elif arg_type == 2: val = arg.read_string() args.append(StringArg(val)) elif arg_type == 3: val = arg.read_bytes() args.append(BytesArg(val)) else: raise ValueError( f'received MethodArgument {name} has an unknown type: {arg_type}' ) return args
def test_read_string(self): stream = bytes([ 0x05, 0x00, 0x00, 0x00, ord('h'), ord('e'), ord('l'), ord('l'), ord('o'), 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, ord('w'), ord('o'), ord('r'), ord('l'), ord('d'), ord('!') ]) reader = StreamReader(stream) expected1 = 'hello' self.assertEqual(expected1, reader.read_string()) expected2 = 'world!' self.assertEqual(expected2, reader.read_string()) reader.close()