Skip to content

Commit 5711b12

Browse files
committed
refactor: convert isinstance chains to match-case statements
Replace isinstance chains with Python 3.10+ match-case syntax for better readability and more idiomatic pattern matching in trie encoding functions.
1 parent 45f4803 commit 5711b12

File tree

1 file changed

+27
-25
lines changed

1 file changed

+27
-25
lines changed

src/ethereum_test_types/trie.py

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -146,22 +146,23 @@ def encode_internal_node(node: Optional[InternalNode]) -> Extended:
146146
which is encoded to `b""`.
147147
"""
148148
unencoded: Extended
149-
if node is None:
150-
unencoded = b""
151-
elif isinstance(node, LeafNode):
152-
unencoded = (
153-
nibble_list_to_compact(node.rest_of_key, True),
154-
node.value,
155-
)
156-
elif isinstance(node, ExtensionNode):
157-
unencoded = (
158-
nibble_list_to_compact(node.key_segment, False),
159-
node.subnode,
160-
)
161-
elif isinstance(node, BranchNode):
162-
unencoded = list(node.subnodes) + [node.value]
163-
else:
164-
raise AssertionError(f"Invalid internal node type {type(node)}!")
149+
match node:
150+
case None:
151+
unencoded = b""
152+
case LeafNode():
153+
unencoded = (
154+
nibble_list_to_compact(node.rest_of_key, True),
155+
node.value,
156+
)
157+
case ExtensionNode():
158+
unencoded = (
159+
nibble_list_to_compact(node.key_segment, False),
160+
node.subnode,
161+
)
162+
case BranchNode():
163+
unencoded = list(node.subnodes) + [node.value]
164+
case _:
165+
raise AssertionError(f"Invalid internal node type {type(node)}!")
165166

166167
encoded = rlp.encode(unencoded)
167168
if len(encoded) < 32:
@@ -176,15 +177,16 @@ def encode_node(node: Node, storage_root: Optional[Bytes] = None) -> Bytes:
176177
177178
Currently mostly an unimplemented stub.
178179
"""
179-
if isinstance(node, FrontierAccount):
180-
assert storage_root is not None
181-
return encode_account(node, storage_root)
182-
elif isinstance(node, U256):
183-
return rlp.encode(node)
184-
elif isinstance(node, Bytes):
185-
return node
186-
else:
187-
raise AssertionError(f"encoding for {type(node)} is not currently implemented")
180+
match node:
181+
case FrontierAccount():
182+
assert storage_root is not None
183+
return encode_account(node, storage_root)
184+
case U256():
185+
return rlp.encode(node)
186+
case Bytes():
187+
return node
188+
case _:
189+
raise AssertionError(f"encoding for {type(node)} is not currently implemented")
188190

189191

190192
@dataclass(slots=True)

0 commit comments

Comments
 (0)