from peewee import (
CharField,
IntegerField,
ForeignKeyField,
Check,
Model,
SqliteDatabase,
)
import utils
DB_PATH = utils.get_from_config("EQUITY_DB")
equity_db = SqliteDatabase(DB_PATH)
class BaseModel(Model):
class Meta:
database = equity_db
legacy_table_names = False
class Crate(Model):
name = CharField(null=False)
version = CharField(null=False)
class Meta:
database = equity_db
legacy_table_names = False
indexes = ((("name", "version"), True),)
class Item(BaseModel):
name = CharField(null=False)
crate = ForeignKeyField(Crate, backref="items", on_delete="CASCADE")
kind = CharField(
choices=[
("Struct", "Struct"),
("TupleStruct", "TupleStruct"),
("Enum", "Enum"),
],
constraints=[Check("kind IN ('Struct', 'TupleStruct', 'Enum')")],
null=False,
)
def_path = CharField(null=False)
import_path = CharField(null=False)
class Trait(BaseModel):
name = CharField(null=False)
def_path = CharField(null=False)
class Trait_Impl(BaseModel):
item = ForeignKeyField(Item)
trait = ForeignKeyField(Trait)
class Method(BaseModel):
name = CharField(null=False)
item = ForeignKeyField(Item, backref="methods", on_delete="CASCADE")
class Associated_Method(BaseModel):
name = CharField(null=False)
item = ForeignKeyField(Item, backref="associated_methods", on_delete="CASCADE")
class Generic_Arg(BaseModel):
arg_idx = IntegerField(null=False)
item = ForeignKeyField(Item, backref="generics", on_delete="CASCADE")
class Generic_Arg_Bound(BaseModel):
bound = CharField(null=False)
arg = ForeignKeyField(Generic_Arg, backref="bounds", on_delete="CASCADE")
class Variant(BaseModel):
name = CharField(null=False)
kind = CharField(
choices=[
("Field", "Field"),
("UnnamedField", "UnnamedField"),
("Variant", "Variant"),
],
constraints=[Check("kind IN ('Field', 'UnnamedField', 'Variant')")],
null=False,
)
typ = CharField(null=False)
item = ForeignKeyField(Item, backref="variants", on_delete="CASCADE")