Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 111c8c97 authored by Jack He's avatar Jack He
Browse files

Packet: Generate Python binding for struct public fields and size()

* Add them as Python read/write properties that can be assigned directly
  in Python

Bug: 140938432
Test: make, facade tests using these bindings
Change-Id: I6cd71506fbb76812ae22398e173467db3945b51f
parent e32fedc8
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -28,6 +28,10 @@ void FixedField::GenGetter(std::ostream& s, Size start_offset, Size end_offset)
  s << "public:\n";
}

std::string FixedField::GetBuilderParameterType() const {
  return "";
}

bool FixedField::GenBuilderParameter(std::ostream&) const {
  // No parameter needed for a fixed field.
  return false;
+2 −0
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ class FixedField : public ScalarField {

  virtual void GenGetter(std::ostream& s, Size start_offset, Size end_offset) const override;

  virtual std::string GetBuilderParameterType() const override;

  virtual bool GenBuilderParameter(std::ostream&) const override;

  virtual bool HasParameterValidator() const override;
+4 −0
Original line number Diff line number Diff line
@@ -32,6 +32,10 @@ void SizeField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) c
  s << "public:\n";
}

std::string SizeField::GetBuilderParameterType() const {
  return "";
}

bool SizeField::GenBuilderParameter(std::ostream&) const {
  // There is no builder parameter for a size field
  return false;
+2 −0
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@ class SizeField : public ScalarField {

  virtual void GenGetter(std::ostream& s, Size start_offset, Size end_offset) const override;

  virtual std::string GetBuilderParameterType() const override;

  virtual bool GenBuilderParameter(std::ostream&) const override;

  virtual bool HasParameterValidator() const override;
+12 −1
Original line number Diff line number Diff line
@@ -193,8 +193,19 @@ void StructDef::GenDefinitionPybind11(std::ostream& s) const {
  }
  s << ">(m, \"" << name_ << "\")";
  s << ".def(py::init<>())";
  s << ".def(\"Serialize\", &" << GetTypeName() << "::Serialize)";
  s << ".def(\"Serialize\", [](" << GetTypeName() << "& obj){";
  s << "std::vector<uint8_t> bytes;";
  s << "BitInserter bi(bytes);";
  s << "obj.Serialize(bi);";
  s << "return bytes;})";
  s << ".def(\"Parse\", &" << name_ << "::Parse)";
  s << ".def(\"size\", &" << name_ << "::size)";
  for (const auto& field : fields_) {
    if (field->GetBuilderParameterType().empty()) {
      continue;
    }
    s << ".def_readwrite(\"" << field->GetName() << "\", &" << name_ << "::" << field->GetName() << "_)";
  }
  s << ";\n";
}