// Code generated - EDITING IS FUTILE. DO NOT EDIT.

export interface InnerObject1 {
	innerField1: string;
	innerField2: string[];
	innerField3: InnerObject2[];
	innerField4: Record<string, any>[];
}

export const defaultInnerObject1 = (): InnerObject1 => ({
	innerField1: "",
	innerField2: [],
	innerField3: [],
	innerField4: [],
});

export interface InnerObject2 {
	name: string;
	details: Record<string, any>;
}

export const defaultInnerObject2 = (): InnerObject2 => ({
	name: "",
	details: {},
});

export type UnionType = Type1 | Type2;

export const defaultUnionType = (): UnionType => (defaultType1());

export interface Type1 {
	group: string;
	options?: string[];
}

export const defaultType1 = (): Type1 => ({
	group: "",
});

export interface Type2 {
	group: string;
	details: Record<string, any>;
}

export const defaultType2 = (): Type2 => ({
	group: "",
	details: {},
});

export interface RecursiveList {
	val: string;
	next?: RecursiveList;
}

export const defaultRecursiveList = (): RecursiveList => ({
	val: "",
});

export interface Spec {
	field1: string;
	inner: InnerObject1;
	union: UnionType;
	map: Record<string, Type2>;
	timestamp: string;
	enum: "val1" | "val2" | "val3" | "val4" | "default";
	i32: number;
	i64: number;
	boolField: boolean;
	floatField: number;
	linkedList: RecursiveList;
	exclusiveInt: number;
}

export const defaultSpec = (): Spec => ({
	field1: "",
	inner: defaultInnerObject1(),
	union: defaultUnionType(),
	map: {},
	timestamp: "",
	enum: "default",
	i32: 0,
	i64: 0,
	boolField: false,
	floatField: 0,
	linkedList: defaultRecursiveList(),
	exclusiveInt: 0,
});

