# This file is part of the faebryk project
# SPDX-License-Identifier: MIT

# This file is auto-generated by zig.
# Do not edit this file directly; edit the corresponding
# Zig file instead.

from enum import Enum, IntEnum  # noqa: F401
from typing import Any  # noqa: F401

from faebryk.core.zig.gen.sexp.pcb import (
    Arc,
    Circle,
    FpText,
    Line,
    Model,
    Pad,
    Polygon,
    Property,
    Rect,
)

# Dirty hack to not error in ruff check
type Allocator = Any

class Footprint:
    name: str
    uuid: str | None
    path: str | None
    layer: str
    propertys: list[Property]
    attr: list[str]
    fp_circles: list[Circle]
    fp_lines: list[Line]
    fp_arcs: list[Arc]
    fp_rects: list[Rect]
    fp_poly: list[Polygon]
    fp_texts: list[FpText]
    pads: list[Pad]
    models: list[Model]
    embedded_fonts: bool | None
    version: int
    generator: str
    generator_version: str
    description: str | None
    tags: list[str]
    tedit: str | None

    def __init__(
        self,
        *,
        name: str,
        uuid: str | None,
        path: str | None,
        layer: str,
        propertys: list[Property],
        attr: list[str],
        fp_circles: list[Circle],
        fp_lines: list[Line],
        fp_arcs: list[Arc],
        fp_rects: list[Rect],
        fp_poly: list[Polygon],
        fp_texts: list[FpText],
        pads: list[Pad],
        models: list[Model],
        embedded_fonts: bool | None,
        version: int,
        generator: str,
        generator_version: str,
        description: str | None,
        tags: list[str],
        tedit: str | None,
    ) -> None: ...
    def __repr__(self) -> str: ...
    @staticmethod
    def __field_names__() -> list[str]: ...
    def __zig_address__(self) -> int: ...

class FootprintFile:
    footprint: Footprint

    def __init__(self, *, footprint: Footprint) -> None: ...
    def __repr__(self) -> str: ...
    @staticmethod
    def __field_names__() -> list[str]: ...
    def __zig_address__(self) -> int: ...
    @staticmethod
    def loads(*, arg_0: Allocator, arg_1: Any) -> FootprintFile: ...
    @staticmethod
    def dumps(*, arg_0: FootprintFile, arg_1: Allocator, arg_2: Any) -> None: ...
    def free(self, *, arg_0: Allocator) -> None: ...

# Module-level functions
def loads(data: str) -> FootprintFile: ...
def dumps(obj: FootprintFile) -> str: ...
