90 lines
2.1 KiB
Python
90 lines
2.1 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Dict, List, Optional, OrderedDict, Union
|
|
|
|
from ...cairo.data_types import CairoType, EnumType, EventType, StructType
|
|
|
|
|
|
@dataclass
|
|
class Abi:
|
|
"""
|
|
Dataclass representing class abi. Contains parsed functions, enums, events and structures.
|
|
"""
|
|
|
|
# pylint: disable=too-many-instance-attributes
|
|
|
|
@dataclass
|
|
class Function:
|
|
"""
|
|
Dataclass representing function's abi.
|
|
"""
|
|
|
|
name: str
|
|
inputs: OrderedDict[str, CairoType]
|
|
outputs: List[CairoType]
|
|
|
|
@dataclass
|
|
class Constructor:
|
|
"""
|
|
Dataclass representing constructor's abi.
|
|
"""
|
|
|
|
name: str
|
|
inputs: OrderedDict[str, CairoType]
|
|
|
|
@dataclass
|
|
class EventStruct:
|
|
"""
|
|
Dataclass representing struct event's abi.
|
|
"""
|
|
|
|
name: str
|
|
members: OrderedDict[str, CairoType]
|
|
|
|
@dataclass
|
|
class EventEnum:
|
|
"""
|
|
Dataclass representing enum event's abi.
|
|
"""
|
|
|
|
name: str
|
|
variants: OrderedDict[str, CairoType]
|
|
|
|
Event = Union[EventStruct, EventEnum]
|
|
|
|
@dataclass
|
|
class Interface:
|
|
"""
|
|
Dataclass representing an interface.
|
|
"""
|
|
|
|
name: str
|
|
items: OrderedDict[
|
|
str, Abi.Function
|
|
] # Only functions can be defined in the interface
|
|
|
|
@dataclass
|
|
class Impl:
|
|
"""
|
|
Dataclass representing an impl.
|
|
"""
|
|
|
|
name: str
|
|
interface_name: str
|
|
|
|
defined_structures: Dict[
|
|
str, StructType
|
|
] #: Abi of structures defined by the class.
|
|
defined_enums: Dict[str, EnumType] #: Abi of enums defined by the class.
|
|
functions: Dict[str, Function] #: Functions defined by the class.
|
|
events: Dict[str, EventType] #: Events defined by the class
|
|
constructor: Optional[
|
|
Constructor
|
|
] #: Contract's constructor. It is None if class doesn't define one.
|
|
l1_handler: Optional[
|
|
Dict[str, Function]
|
|
] #: Handlers of L1 messages. It is None if class doesn't define one.
|
|
interfaces: Dict[str, Interface]
|
|
implementations: Dict[str, Impl]
|