// AUTO GENERATED FILE, DO NOT EDIT.
//
// Generated by `package:ffigen`.
import 'dart:ffi' as ffi;

class Struct1 extends ffi.Struct {
  @ffi.Int8()
  external int a;
}

class Union1 extends ffi.Union {
  @ffi.Int8()
  external int a;
}

class EmptyUnion extends ffi.Opaque {}

class Primitives extends ffi.Union {
  @ffi.Int8()
  external int a;

  @ffi.Int32()
  external int b;

  @ffi.Float()
  external double c;

  @ffi.Double()
  external double d;
}

class PrimitivesWithPointers extends ffi.Union {
  @ffi.Int8()
  external int a;

  @ffi.Float()
  external double b;

  external ffi.Pointer<ffi.Double> c;

  external ffi.Pointer<Union1> d;

  external ffi.Pointer<Struct1> d_1;
}

class WithArray extends ffi.Union {
  @ffi.Array.multi([10])
  external ffi.Array<ffi.Int8> a;

  @ffi.Array.multi([10])
  external ffi.Array<Union1> b;

  @ffi.Array.multi([10])
  external ffi.Array<Struct1> b_1;

  @ffi.Array.multi([10])
  external ffi.Array<ffi.Pointer<Union1>> c;
}
