Upgrade pdl-compiler to 0.2.2

This project was upgraded with external_updater.
Usage: tools/external_updater/updater.sh update rust/crates/pdl-compiler
For more info, check https://cs.android.com/android/platform/superproject/+/main:tools/external_updater/README.md

Test: TreeHugger
Change-Id: I4151e72a15bcac21c38b734ac3ba71fde1b3d0b3
diff --git a/scripts/generate_cxx_backend_tests.py b/scripts/generate_cxx_backend_tests.py
index 880988e..818d376 100755
--- a/scripts/generate_cxx_backend_tests.py
+++ b/scripts/generate_cxx_backend_tests.py
@@ -62,13 +62,30 @@
             sanitized_var = var.replace('[', '_').replace(']', '')
             field_var = f'{sanitized_var}_{id}'
 
-            if isinstance(field, ast.ScalarField):
+            if isinstance(field, ast.ScalarField) and field.cond:
+                value = f"std::make_optional({value})" if value is not None else "std::nullopt"
+                checks.append(f"ASSERT_EQ({get_field(decl, var, id)}, {value});")
+
+            elif isinstance(field, ast.ScalarField):
+                checks.append(f"ASSERT_EQ({get_field(decl, var, id)}, {value});")
+
+            elif (isinstance(field, ast.TypedefField) and
+                  isinstance(field.type, ast.EnumDeclaration) and
+                  field.cond):
+                value = f"std::make_optional({field.type_id}({value}))" if value is not None else "std::nullopt"
                 checks.append(f"ASSERT_EQ({get_field(decl, var, id)}, {value});")
 
             elif (isinstance(field, ast.TypedefField) and
                   isinstance(field.type, (ast.EnumDeclaration, ast.CustomFieldDeclaration, ast.ChecksumDeclaration))):
                 checks.append(f"ASSERT_EQ({get_field(decl, var, id)}, {field.type_id}({value}));")
 
+            elif isinstance(field, ast.TypedefField) and field.cond and value is None:
+                checks.append(f"ASSERT_TRUE(!{get_field(decl, var, id)}.has_value());")
+
+            elif isinstance(field, ast.TypedefField) and field.cond and value is not None:
+                checks.append(f"{field.type_id} const& {field_var} = {get_field(decl, var, id)}.value();")
+                checks.extend(check_members(field.type, field_var, value))
+
             elif isinstance(field, ast.TypedefField):
                 checks.append(f"{field.type_id} const& {field_var} = {get_field(decl, var, id)};")
                 checks.extend(check_members(field.type, field_var, value))
@@ -169,9 +186,21 @@
             value = initializer['payload'] if isinstance(field, (ast.PayloadField,
                                                                  ast.BodyField)) else initializer.get(field_id, None)
 
-            if isinstance(field, ast.ScalarField):
+            if field.cond_for:
+                pass
+
+            elif field.cond and value is None:
+                parameters.append("std::nullopt")
+
+            elif isinstance(field, ast.ScalarField) and field.cond:
+                parameters.append(f"std::make_optional({value})")
+
+            elif isinstance(field, ast.ScalarField):
                 parameters.append(f"{value}")
 
+            elif isinstance(field, ast.TypedefField) and isinstance(field.type, ast.EnumDeclaration) and field.cond:
+                parameters.append(f"std::make_optional({field.type_id}({value}))")
+
             elif isinstance(field, ast.TypedefField) and isinstance(field.type, ast.EnumDeclaration):
                 parameters.append(f"{field.type_id}({value})")