from __future__ import annotations

import flatbuffers
import numpy as np

import typing
from MyGame.Example.TestEnum import TestEnum

uoffset: typing.TypeAlias = flatbuffers.number_types.UOffsetTFlags.py_type

class NestedStruct(object):
  @classmethod
  def SizeOf(cls) -> int: ...

  def Init(self, buf: bytes, pos: int) -> None: ...
  def A(self, i: int) -> typing.List[int]: ...
  def AAsNumpy(self) -> np.ndarray: ...
  def ALength(self) -> int: ...
  def AIsNone(self) -> bool: ...
  def B(self) -> typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C]: ...
  def C(self, i: int) -> typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C]: ...
  def CAsNumpy(self) -> np.ndarray: ...
  def CLength(self) -> int: ...
  def CIsNone(self) -> bool: ...
  def D(self, i: int) -> typing.List[int]: ...
  def DAsNumpy(self) -> np.ndarray: ...
  def DLength(self) -> int: ...
  def DIsNone(self) -> bool: ...
class NestedStructT(object):
  a: typing.List[int]
  b: typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C]
  c: typing.List[typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C]]
  d: typing.List[int]
  def __init__(
    self,
    a: typing.List[int] | None = ...,
    b: typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C] = ...,
    c: typing.List[typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C]] | None = ...,
    d: typing.List[int] | None = ...,
  ) -> None: ...
  @classmethod
  def InitFromBuf(cls, buf: bytes, pos: int) -> NestedStructT: ...
  @classmethod
  def InitFromPackedBuf(cls, buf: bytes, pos: int = 0) -> NestedStructT: ...
  @classmethod
  def InitFromObj(cls, nestedStruct: NestedStruct) -> NestedStructT: ...
  def _UnPack(self, nestedStruct: NestedStruct) -> None: ...
  def Pack(self, builder: flatbuffers.Builder) -> None: ...

def CreateNestedStruct(builder: flatbuffers.Builder, a: int, b: typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C], c: typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C], d: int) -> uoffset: ...

