/// <reference path="embind.d.ts" />
/* This file is autogenerated using gen_types.go and make generate */
declare namespace namespace_one {
	export interface Bindings {
		_privateFunction1(ptr: number): number;
		_privateFunction2(x: number, y: number): number;

		publicFunction1(): boolean;
		publicFunction2(input: string): void;

		readonly AnotherClass: AnotherClassConstructor;
		readonly Something: SomethingConstructor;

		readonly SOME_FLAG: number;
		readonly hasBird: boolean;
		readonly optionalConst?: string;
	}

	export interface AnotherClassConstructor {
		new(): AnotherClass;
		new(name: string, thing: Something): AnotherClass;
	}

	export interface SomethingConstructor {
		new(name: string): Something;
	}

	export interface AnotherClass extends embind.EmbindObject<AnotherClass> {
		get(): Something;
	}

	export interface Something extends embind.EmbindObject<Something> {
		_setName(name: string): void;

		getName(): string;
	}

	export interface SomeValueObject {
		columns?: number,
		isInteger: boolean,
		name: string,
		object: AnotherClass,
	}
}
