- if a not in data:
- logger.debug("Argument {} not given, defaulting to 0"
- .format(a))
- b += b'\x00' * self.packers[i].size
- continue
- b += self.packers[i].pack(data[a], kwargs)
+
+ # Try one of the format functions
+ if data and type(data) is not dict and a not in data:
+ raise ValueError("Invalid argument: {} expected {}.{}".
+ format(data, self.name, a))
+
+ # Defaulting to zero.
+ if not data or a not in data: # Default to 0
+ arg = None
+ kwarg = None # No default for VLA
+ else:
+ arg = data[a]
+ kwarg = kwargs[a] if a in kwargs else None
+
+ if isinstance(self.packers[i], VPPType):
+ try:
+ b += self.packers[i].pack(arg, kwarg)
+ except ValueError:
+ # Invalid argument, can we convert it?
+ arg = VPPFormat.format(self.packers[i].name, data[a])
+ data[a] = arg
+ kwarg = arg
+ b += self.packers[i].pack(arg, kwarg)
+ else:
+ b += self.packers[i].pack(arg, kwargs)
+