73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
from ....marshmallow import Schema, fields
|
|
from ....marshmallow_oneofschema import OneOfSchema
|
|
|
|
from .shape import (
|
|
CONSTRUCTOR_ENTRY,
|
|
EVENT_ENTRY,
|
|
FUNCTION_ENTRY,
|
|
L1_HANDLER_ENTRY,
|
|
STRUCT_ENTRY,
|
|
)
|
|
|
|
|
|
class TypedParameterSchema(Schema):
|
|
name = fields.String(data_key="name", required=True)
|
|
type = fields.String(data_key="type", required=True)
|
|
|
|
|
|
class StructMemberSchema(TypedParameterSchema):
|
|
offset = fields.Integer(data_key="offset", required=False)
|
|
|
|
|
|
class FunctionBaseSchema(Schema):
|
|
name = fields.String(data_key="name", required=True)
|
|
inputs = fields.List(
|
|
fields.Nested(TypedParameterSchema()), data_key="inputs", required=True
|
|
)
|
|
outputs = fields.List(
|
|
fields.Nested(TypedParameterSchema()), data_key="outputs", required=True
|
|
)
|
|
|
|
|
|
class FunctionAbiEntrySchema(FunctionBaseSchema):
|
|
type = fields.Constant(FUNCTION_ENTRY, data_key="type", required=True)
|
|
|
|
|
|
class ConstructorAbiEntrySchema(FunctionBaseSchema):
|
|
type = fields.Constant(CONSTRUCTOR_ENTRY, data_key="type", required=True)
|
|
|
|
|
|
class L1HandlerAbiEntrySchema(FunctionBaseSchema):
|
|
type = fields.Constant(L1_HANDLER_ENTRY, data_key="type", required=True)
|
|
|
|
|
|
class EventAbiEntrySchema(Schema):
|
|
type = fields.Constant(EVENT_ENTRY, data_key="type", required=True)
|
|
name = fields.String(data_key="name", required=True)
|
|
keys = fields.List(
|
|
fields.Nested(TypedParameterSchema()), data_key="keys", required=True
|
|
)
|
|
data = fields.List(
|
|
fields.Nested(TypedParameterSchema()), data_key="data", required=True
|
|
)
|
|
|
|
|
|
class StructAbiEntrySchema(Schema):
|
|
type = fields.Constant(STRUCT_ENTRY, data_key="type", required=True)
|
|
name = fields.String(data_key="name", required=True)
|
|
size = fields.Integer(data_key="size", required=True)
|
|
members = fields.List(
|
|
fields.Nested(StructMemberSchema()), data_key="members", required=True
|
|
)
|
|
|
|
|
|
class ContractAbiEntrySchema(OneOfSchema):
|
|
type_field_remove = False
|
|
type_schemas = {
|
|
FUNCTION_ENTRY: FunctionAbiEntrySchema,
|
|
L1_HANDLER_ENTRY: L1HandlerAbiEntrySchema,
|
|
CONSTRUCTOR_ENTRY: ConstructorAbiEntrySchema,
|
|
EVENT_ENTRY: EventAbiEntrySchema,
|
|
STRUCT_ENTRY: StructAbiEntrySchema,
|
|
}
|